WPF 路由事件:主窗口到用户控件



我想让主窗口的视图模型通知用户控件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 进行通信。

自定义命令教程

相关内容

  • 没有找到相关文章

最新更新