WPF绑定,当对象的引用更改时

WPF绑定,当对象的引用更改时,wpf,binding,reference,Wpf,Binding,Reference,代码段: xaml 如果我将节点类型更改为'bb',textblock也会更改,但是如果我创建一个平淡的新对象并将属性节点类型设置为'bb',然后将其分配给MemberInfo,则textblock不会更新。有人能给我解释一下吗?提前谢谢 假设“FamilyMemberInfo”类有20个属性,所有属性都与UI上的元素(textblock、combobox等)绑定,我从其他地方获得了FamilyMemberInfo的一个实例,我想简单地将其分配给MemberInfo,就像上面的代码一样,以使UI

代码段:

xaml

如果我将节点类型更改为'bb',textblock也会更改,但是如果我创建一个平淡的新对象并将属性节点类型设置为'bb',然后将其分配给MemberInfo,则textblock不会更新。有人能给我解释一下吗?提前谢谢

假设“FamilyMemberInfo”类有20个属性,所有属性都与UI上的元素(textblock、combobox等)绑定,我从其他地方获得了FamilyMemberInfo的一个实例,我想简单地将其分配给MemberInfo,就像上面的代码一样,以使UI相应地更新,如何使其工作


谢谢。

您必须将
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在构造函数中,它指向您在构造函数中创建的对象,我们将其命名为object
A

现在,您设置
MemberInfo=mi2
mi2
是一个不同的对象,您设置
MemberInfo
指向
mi
,而您创建的对象
a
(在构造函数内部)仍然存在,并且
这个对象。DataContext
仍然指向该对象


因此,您必须设置
DataContext
以指向上述代码中的新对象。

aha,酷,它可以工作!我怎么可能没有注意到,:)万分感谢。
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; 
}
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
}