[英]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.