[英]WPF Binding data from two controls
我試圖將自定義屬性從一個控件綁定到另一個控件,這里代碼:
首先,我的自定義TreeViewControl
public partial class ItemTreeControl : UserControl
{
readonly ItemTreeViewModel itemTreeViewModel;
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem",
typeof(Item),
typeof(ItemTreeControl),
new PropertyMetadata(default(Item)));
public Item SelectedItem
{
get { return (Item)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
}
這是另一個用於顯示詳細信息的自定義控件:
public partial class ItemDetailControl : UserControl
{
public static readonly DependencyProperty DetailItemProperty =
DependencyProperty.Register("DetailItem",
typeof(Item),
typeof(ItemDetailControl),
new PropertyMetadata(default(Item)));
public Item DetailItem
{
get { return (Item)GetValue(DetailItemProperty); }
set { SetValue(DetailItemProperty, value); }
}
}
現在具有綁定的XAML代碼:
<StackPanel>
<ItemTreeControl x:Name="itemTreeControl"/>
<ItemDetailControl DetailItem="{Binding ElementName=itemTreeControl,
Path=SelectedItem, Mode=TwoWay}"/>
</StackPanel>
現在,如果有新值到達ItemTreeControl.SelectedItem
,則ItemTreeControl.SelectedItem
中的值ItemDetailControl.DetailItem
更改。 為什么?
更新。
在ItemTreeControl
隱藏代碼:
private void myTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue is ItemViewModel)
{
SelectedItem = (e.NewValue as ItemViewModel).Item;
}
else
{
SelectedItem = null;
}
}
通常,UI控件不會綁定到彼此的屬性。 SelectedItem
非常適合保存在ViewModel級別。 如果您有一個虛擬機作為這些控件的基礎,則應該將這兩個控件都綁定到一個虛擬機級屬性。
還要注意,Detail控件通常不會更改SelectedItem,因此綁定不應為TwoWay
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.