代码段:
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更新,如何使其工作?
感谢。
答案 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 = mi2
,mi2
是一个差异对象,您将MemberInfo
设置为指向mi
,而您创建的对象A
(在构造函数)仍在那里,this.DataContext
仍然指向该对象。
因此,您必须将DataContext
设置为指向新对象,如上面的代码所示。