1

代码片段:

xml

<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 上的元素(文本块、组合框等)绑定,我从其他地方获得了 FamilyMemberInfo 的实例,我想简单地将其分配给 MemberInfo上面的代码使 UI 相应地更新,如何使它工作?

谢谢。

4

1 回答 1

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

现在您设置MemberInfo = mi2,mi2是一个差异对象,并且您设置MemberInfo为指向您创建的mi对象A(在构造函数内部)仍然存在并且this.DataContext仍然指向该对象。

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

于 2012-10-18T06:06:10.477 回答