1

コードスニペット:

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を更新するための上記のコード、それを機能させる方法は?

ありがとう。

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;、コンストラクター内に設定すると、コンストラクターで作成したオブジェクトを指しているためです。オブジェクトという名前を付けましょうA

ここMemberInfo = mi2で、を設定します。これmi2は差分オブジェクトであり、作成したオブジェクト(コンストラクター内)がまだそこにあり、そのオブジェクトMemberInfoを指している間を指すように設定します。miAthis.DataContext

したがって、DataContext上記のコードのように、新しいオブジェクトを指すように設定する必要があります。

于 2012-10-18T06:06:10.477 に答える