1

私はWpfデータバインディング機能を研究するのが初めてですが、最近、1つの問題に遭遇しました。

ViewModelに次のようなコードがあると仮定します。

private Person person;    
public Person Person
{
    get { return person; }
    set
    {
        SetProperty<Person>(ref person, ref value, ()=>Person);
    }
}

ひどいネーミングは無視してください。次にPerson、コマンドのExecute()メソッドで次のようにプロパティを変更しました。

//try 1
private void UpdateInfoExecute()
{
     Person.Name="somebody";
     Person.Age=22;
}

最後に、データバインディングが失敗しました。このように実装を変更すると、次のようになります。

//try 2
Person = new Models.Person() { Age=22,Name="somebody"};

成功します!

まあ、私の意見では、try1もtry2とPerson同じようにのプロパティを変更しました。イベントはプロパティをリッスンし、試行1が実行された後に変更されることを確認します。PropertyChangedPerson

私はこれの理論を知りません、誰かが私が逃した鍵を私に指摘することができますか?

4

1 に答える 1

1

SetPropertyが正確に何をするのかはわかりませんが、「try1」では、PersonではなくNameとAgeを変更しています。そのため、NameプロパティとAgeプロパティが引き上げられ、Personの参照は変更されず、同じままでした。「try2」では、実際に新しいPersonを設定したため、プロパティが変更されて引き上げられました。

解決策:Personも実装INotifyPropertyChangedし、各プロパティがを上げることを確認してくださいPropertyChanged。その後、すべてが正常に動作するはずです。

覚えておいてくださいは単なる財産の.Personようなものです。.Name

于 2013-03-14T12:26:25.057 に答える