[英]Use selectedItem of treeview from another ViewModel
選項 1:紅色和藍色視圖可以共享同一個視圖 model。 然后他們可以簡單地綁定到相同的屬性。
選項 2:如果您想堅持使用單獨的視圖 model 類,您可以在使用事件聚合器或信使選擇項目時從RedViewModel
向BlueViewModel
發送松散耦合的消息。
如何在 MVVM WPF 應用程序中通知子視圖事件的父視圖?
選項 3:在兩個視圖模型中使用共享服務。
您不能綁定到標准 WPF TreeView
的SelectedItem
。 但是,您可以使用Beahvior
class 創建可綁定屬性
public class perTreeViewHelper : Behavior<TreeView>
{
public object BoundSelectedItem
{
get => GetValue(BoundSelectedItemProperty);
set => SetValue(BoundSelectedItemProperty, value);
}
public static readonly DependencyProperty BoundSelectedItemProperty =
DependencyProperty.Register("BoundSelectedItem",
typeof(object),
typeof(perTreeViewHelper),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
OnBoundSelectedItemChanged));
private static void OnBoundSelectedItemChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
if (args.NewValue is perTreeViewItemViewModelBase item)
{
item.IsSelected = true;
}
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged;
}
protected override void OnDetaching()
{
AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
base.OnDetaching();
}
private void OnTreeViewSelectedItemChanged(object obj, RoutedPropertyChangedEventArgs<object> args)
{
BoundSelectedItem = args.NewValue;
}
}
這樣,您可以綁定到一個 ViewModel 上的屬性,您可以從另一個 ViewModel 引用該屬性。 顯然,這兩個 ViewModel 需要以某種方式鏈接——通常是通過將一個作為另一個的屬性。
更多關於我在我的博客文章中的 WPF/MVVM 上下文中對 TreeViews 的看法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.