WPF绑定,当对象的引用发生变化时

时间:2012-10-18 05:58:13

标签: wpf binding reference

代码段:

XAML

<TextBlock Grid.Row="0"  Text="{Binding Path=NodeType}"></TextBlock>
<Button Name="bt" Grid.Row="1" Click="bt_Click">click</Button>

C#

public FamilyMemberInfo MemberInfo;
public MainWindow()
{
    InitializeComponent();

    MemberInfo = new FamilyMemberInfo();
    MemberInfo.NodeType = "aa";
    this.DataContext = MemberInfo;
}
private void bt_Click(object sender, RoutedEventArgs e)
{
    //MemberInfo.NodeType = "bb";
    FamilyMemberInfo mi2 = new FamilyMemberInfo();
    mi2.NodeType = "bb";
    MemberInfo = mi2; 
}

如果我将NodeType更改为'bb',文本块也会更改,但如果我创建一个平淡的新对象并将属性NodeType设置为'bb',然后将其分配给MemberInfo,则不会更新文本块。任何人都能解释一下吗?提前谢谢。

并且说'FamilyMemberInfo'类有20个属性,所有属性都与UI上的元素(textblock,combobox等)绑定,我从其他地方获得了FamilyMemberInfo的实例,我想简单地将它分配给作为上面代码的MemberInfo使UI更新,如何使其工作?

感谢。

1 个答案:

答案 0 :(得分:2)

您必须将DataContext设置为您创建的新实例。

private void bt_Click(object sender, RoutedEventArgs e) 
{ 
    //MemberInfo.NodeType = "bb"; 
    FamilyMemberInfo mi2 = new FamilyMemberInfo(); 
    mi2.NodeType = "bb"; 
    MemberInfo = mi2; 
    this.DataContext = MemberInfo; // you have to add this line to the code
} 

原因是当你在构造函数中设置this.DataContext = MemberInfo;时,它指向你在构造函数中创建的对象,让它命名为对象A

现在设置MemberInfo = mi2mi2是一个差异对象,您将MemberInfo设置为指向mi,而您创建的对象A(在构造函数)仍在那里,this.DataContext仍然指向该对象。

因此,您必须将DataContext设置为指向新对象,如上面的代码所示。