我想让主窗口的视图模型通知用户控件ObservableCollection
(视图模型的属性)的排序已通过事件更改。
使用共享/静态方法不是我的解决方案,因为主窗口视图模型不应知道用户控件(它本身绑定到同一视图模型)。
列表框控件使用 ObservableCollection
作为其 Items 的源,此方案只是强制ScrollIntoView
列表框。
我知道RoutedEvents
和隧道的概念,我认为这可能是我的解决方案,但我不完全确定这是否是唯一的选择。以这种方式路由对我来说是一个全新的概念。
我已经看过这个例子,但我大概需要自定义事件,而不是现有的路由事件。
谢谢。
CollectionChanged
事件由ICollectionView
触发,当添加/删除项目或刷新列表时。您可以利用此事件引发自己的自定义事件。下面的代码片段演示了在对 ViewModel VM 的学生集合进行排序时的用法。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
ICollectionView view = (ICollectionView)CollectionViewSource.GetDefaultView(vm.Students);
view.CollectionChanged += view_CollectionChanged;
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
}
void view_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("view_CollectionChanged changed !");
}
如果您告诉您如何在用户控件中使用 ViewModel 的集合属性,则可以说更多。
通常,MainWindow 和 UserControls 应该通过 ICommand 进行通信。
自定义命令教程