Tag: observablecollection

使用MVVM对集合进行WPF分组

我是WPF和MVVM的新手,所以如果这是一个愚蠢的问题,我会先请求原谅。 问题:我正在尝试使用MVVM设计模式创建一个分组的项目列表。 我可以用代码来做,但更喜欢更优雅的解决方案。 细节 假设我有一系列动物:马,狼,猴子,老虎,北极熊,斑马,蝙蝠等。 这些动物按大洲分组:北美洲,非洲,南极洲等。 目标:在一个包装面板中,我想创建分组切换按钮。 例如,对于在北美发现的每种动物,将会有一个带有ToggleButtons的“北美”GroupBox。 接下来,会有一个标题为“Africa”的GroupBox,而在组框内则是非洲的所有动物。 使用MVVM设计模式,我可以绑定到ObservableCollection,并使用数据模板创建我需要的切换按钮。 在我挣扎的地方,我不知道如何将动物分组。 我需要的只是指导方针。 任何帮助,将不胜感激。

WPF:将列表绑定到ListBox

我上课了: public class A : INotifyPropertyChanged { public List bList { get; set; } public void AddB(B b) { bList.Add(b); NotifyPropertyChanged(“bList”); } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } } 和绑定(UserControl的DataContext是A的一个实例): 显示元素,将新对象添加到List后ListBox不会更新 将列表更改为ObservableCollection并删除NotifyPropertyChanged处理程序后,一切正常。 为什么列表不起作用?

WPF绑定到Model对象列表的ViewModel列表

在模型中,我有: public ObservableCollection Items { get; private set; } 在ViewModel中,我有一个相应的ItemViewModel列表。 我希望这个列表与模型列表双向绑定: public ObservableCollection ItemViewModels … 在XAML中,我将绑定(在本例中为TreeView)到ItemViewModels属性。 我的问题是,上面显示的ViewModel中的“…”是什么? 我希望一行或两行代码绑定这两个ObservableCollections(提供ViewModel的类型来为每个模型对象构造)。 但是,我担心的是需要处理Items.CollectionChanged事件的一堆代码,并根据需要通过构造ViewModels手动更新ItemViewModels列表,并根据对ItemViewModels的更改来更新Items集合。 谢谢! 埃里克

将不同的集合绑定到datagrid

我有一些collections品。 例如, List 1和List 2 。 两者都是List 。 我需要做什么: 1)将它们插入Datagrid : 2)为Lists添加新项目。 例如,表单上有一些按钮。 我点击它,新项目正在添加到第一个列表。 Datagrid现在看起来像这样: 3)在某种程度上。 当我想将Datagrid内容传递给我的类对象时,程序必须知道List 1现在包含2个项目,但是List 2 – 1项目。 我怎样才能以最佳方式执行此类function?

替换ObservableCollection?

我正在寻找一个线程安全的ObservableCollection的替代品,在UI线程上引发事件,最好有一个AddRange方法。 我已经看到在这里和其他地方发布了一些实现,但我更喜欢已经过测试和validation的实现,而且我不需要维护自己。 所以有人能指出我这样的替代品,最好通过NuGet获得吗?

在ObservableCollection上实现AddRange,并对DataBinding提供适当的支持

我想我自己的ObservableCollection后代支持AddRange方法。 这是我目前拥有的: public class ObservableCollectionPlus : ObservableCollection { public void InsertRange(IEnumerable items) { this.CheckReentrancy(); foreach (var item in items) Items.Add(item); var type = NotifyCollectionChangedAction.Reset; var colChanged = new NotifyCollectionChangedEventArgs(type); var countChanged = new PropertyChangedEventArgs(“Count”); OnPropertyChanged(countChanged); OnCollectionChanged(colChanged); } } 我不太了解这里到底发生了什么,为什么会引发这些事件。 这是我在对google和stackoverflow进行一些研究后组装的一个解决方案。 现在,如果我将我的类的实例绑定到LongListSelector然后,在通过InsertRange动态地将项添加到ObservableCollectionPlus ,绑定的LongListSelector的滚动位置将被发送到它的顶部。 如果我以这种标准方式添加项目: foreach (var item in items) collection.Add(item); 那么LongListSelector的位置不会被移位。 但是当然这样我得到的DataBinding通知开销是不受欢迎的。 显然,在我目前的解决方案中出现了问题。 如何实现与foreach (var item […]

如何在wpf app后面的代码中创建集合视图源

我有以下代码 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var entities = new DemoEntities(); var depts = entities.Depts.ToList(); // entity framwork dept table CollectionViewSource cvs = (CollectionViewSource)CollectionViewSource.GetDefaultView(depts); } } 我的目的是在XAML中将此集合绑定到以下窗口资源 运用 CollectionViewSource collectionViewSource = this.FindResource(“Departments”) as CollectionViewSource; 但是在执行以下代码行时 CollectionViewSource cvs =(CollectionViewSource)CollectionViewSource.GetDefaultView(depts); 它抛出一个exception,并且该exception的内部exception正在跟随 {“Unable to cast object of type ‘System.Windows.Data.ListCollectionView’ to type ‘System.Windows.Data.CollectionViewSource’.”} […]

使用BlockingCollection更新ObservableCollection

我订阅了一个服务,当收到一个新元素时会引发一个事件,我将这个元素添加到一个BlockingCollection 。 我有第二个线程运行,它将循环BlockingCollection以在可观察集合中添加/更新元素。 问题是你如何添加ObservableCollection ? 我知道我不能在这种类型的集合上做一个.add ,因为它需要在UI线程上完成。 所以我尝试使用不同的ObservableCollection子类,它使用调度程序来编组元素的添加,但每次都会出现同样的错误 “Unknown Module中发生了’System.StackOverflowException’类型的未处理exception。” 有一个疑难解答提示: 确保你没有无限循环或无限递归。 嗯,实际上,我确实有一些无限循环,因为BlockingQueue一直在接收新的元素,比如每秒5到10个。 如果我没有将控件绑定到observablecollection ,或者如果我使用List,那么我不会得到exception。 Class ElementHolder { private ExternalService _externalService; private ObservableCollection _elementsList = new ObservableCollection(); private BlockingCollection _elementsReceived = new BlockingCollection(); public ObservableCollection ElementsList { get { return _elementList; } set { _elementList = value; } } public ElementHolder() { Task.Factory.StartNew(ReadElements); _externalService = […]

如何在ObservableCollection 上执行foreach lambda表达式?

如何在ObservableCollection 上执行foreach lambda表达式? 尽管此方法与List 一起存在,但没有使用ObservableCollection 的foreach方法。 有没有可用的扩展方法?

WPF将已过滤的ObservableCollection ICollectionView绑定到Combobox

我想根据类型(类型AddPoint)将ObservableCollection过滤为子集,并希望它按升序排序,不重复。 我的基类是ModelBase,w /子类AddPoint,Time,Repeat等…… ObservableCollection MotionSequenceCollection将以任何顺序填充这些类型,有些将是重复的。 我已经尝试了几次不同的时间,并在ICollectionView属性中显示它们,我从’拉出’: 绑定集合的子集 。 可观察的收集 private ObservableCollection _motionSequenceCollection = new ObservableCollection(); public ObservableCollection MotionSequenceCollection { get { return _motionSequenceCollection; } set { if (_motionSequenceCollection == value) { return; } var oldValue = _motionSequenceCollection; _motionSequenceCollection = value; // Update bindings, no broadcast RaisePropertyChanged(); } } public ICollectionView Location { get { var […]