【发布时间】:2016-04-22 01:50:50
【问题描述】:
我试图将自定义属性从一个控件绑定到另一个控件,这里代码:
首先,我的自定义 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,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;
}
}
【问题讨论】:
-
代码中一个有趣的部分是值如何到达未提供的
SelectedItem。
标签: c# wpf wcf-binding