Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF MVVM DataGrid ItemsSource绑定到不同集合_Wpf_Vb.net_Mvvm_Datagrid - Fatal编程技术网

WPF MVVM DataGrid ItemsSource绑定到不同集合

WPF MVVM DataGrid ItemsSource绑定到不同集合,wpf,vb.net,mvvm,datagrid,Wpf,Vb.net,Mvvm,Datagrid,我有一个带有动态菜单的窗口和一个DataGrid,它根据单击的菜单项显示不同的记录。 每个菜单项都返回自定义类的ObservableCollection。 所有的类都是不同的,不一定相互关联 目前,我在ViewModel中创建了一个ObservableCollectionOf对象,每次单击菜单项时都会用新结果填充它。 问题是对象没有实现INotifyPropertyChanged,这迫使我手动分配ItemsSource 我确信有一种方法可以实现我所追求的目标,但我想不出来。您有两种选择: 清除O

我有一个带有动态菜单的窗口和一个DataGrid,它根据单击的菜单项显示不同的记录。 每个菜单项都返回自定义类的ObservableCollection。 所有的类都是不同的,不一定相互关联

目前,我在ViewModel中创建了一个ObservableCollectionOf对象,每次单击菜单项时都会用新结果填充它。 问题是对象没有实现INotifyPropertyChanged,这迫使我手动分配ItemsSource

我确信有一种方法可以实现我所追求的目标,但我想不出来。

您有两种选择:

清除ObservableCollection,然后向其中添加新项。这可能会很慢,因为这样做时会触发多个通知事件,如果超过几十个项目,那么在这样做时,您将开始注意到一些UI慢下来

确保viewmodel实现并且包含ObservableCollection的属性触发属性更改通知。然后,当您有一个新列表要显示时,只需分配一个新的ObservableCollection


因为您的集合包含不同类型的对象,我相信您已经研究过如何构建UI—这样您就可以拥有一个自定义布局,该布局取决于列表项的类型。

我实际上有多个集合,但每个集合都包含相同类型的项。此外,我的ViewModel已经实现了INotifyPropertyChanged,但如果我使用ObservableCollectionOf对象,即使我向集合中添加新项,它也不会触发PropertyChanged事件。@FabioL.ObservableCollection实现,这意味着它会在添加或删除项时发出通知。您没有包含任何代码,因此我必须假设您正确地收到了来自包含ObservableCollection的VM属性的setter的通知。集合中的对象类型没有任何区别。也许你可以为你的问题添加更多的细节以获得更准确的答案?经过深思熟虑,我最终使用IEnumerable作为数据网格的源。这样我就可以直接分配每个集合,而不必手动添加每个项目。我仍然不完全满意事情的运作方式,但目前一切正常。在未来,我将试图找到一种方法来改进窗口背后的逻辑。谢谢你的帮助!