簡體   English   中英

WPF路由事件:MainWindow到UserControl

[英]WPF Routed Event: MainWindow to UserControl

我想讓主窗口的視圖模型通知用戶控件, ObservableCollection的排序(視圖模型的屬性)已通過事件進行了更改。

使用共享/靜態方法不是我的解決方案,因為主窗口視圖模型不應該知道用戶控件(它本身綁定到同一視圖模型)。

列表框控件將ObservableCollection用作其Items的源,這種情況只是將ScrollIntoView強制在列表框上。

我知道RoutedEvents和隧道的概念,我認為這可能是我的解決方案,但我不確定這是否是唯一的選擇。 對我來說,以這種方式進行路由是一個全新的概念。

我看了這個示例,但大概需要自定義事件,而不是現有的路由事件。

謝謝。

當添加/刪除項目或刷新列表時,由ICollectionView觸發CollectionChanged事件。 您可以利用此事件引發您自己的自定義事件。 下面的代碼片段演示了對ViewModel vm的Student集合進行排序時的用法。

        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的collection屬性,則可以說更多。

通常,MainWindow和UserControls應該通過ICommand進行通信。

自定義命令教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM