我希望我的主窗口的视图模型告知用户控件ObservableCollection
(视图模型的属性)的排序已通过事件更改。
使用共享/静态方法不是我的解决方案,因为主窗口视图模型不应该知道用户控件(它本身绑定到相同的视图模型)。
列表框控件使用ObservableCollection
作为其项目的来源,此方案只是强制ScrollIntoView
在列表框中。
我意识到RoutedEvents
和隧道的概念,我认为这可能是我的解决方案,但我不完全确定这是否是唯一的选择。以这种方式路由对我来说是一个全新的概念。
我已经查看了this example,但我需要自定义事件,而不是现有的路由事件。
感谢。
答案 0 :(得分:0)
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 !");
}
如果你告诉你如何在UserControl中使用ViewModel的集合属性,可以说更多。
通常,MainWindow和UserControl应该通过ICommand进行通信。