この質問は、実装時に/ INotifyPropertyChangedの使用期待されるふるまいの理解の私の欠如を示すことが起こっている:INotifyPropertyChangedを実装するネストプロパティは、親オブジェクトのpropogateを変更する必要がありますか?
質問です - あなたは自身がINotifyPropertyChangedのを実装するクラスを持っている場合、入れ子にしたこと、期待通りに動作するように結合するためにINotifyPropertyChanged型のプロパティは、これらのプロパティの通知を変更するために内部的にサブスクライブし、通知をプロポーザルする予定ですか?あるいは、拘束力のあるインフラストラクチャーにこれを不要にする賢明さが期待されていますか?例えば
(このコードは完全ではありません注意してください - ちょうど質問を説明するためのもの):
public class Address : INotifyPropertyChanged
{
string m_street
string m_city;
public string Street
{
get { return m_street; }
set
{
m_street = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
}
}
public string City
{
get { return m_city; }
set
{
m_city = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
}
}
public class Person : INotifyPropertyChanged
{
Address m_address;
public Address
{
get { return m_address = value; }
set
{
m_address = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
}
}
}
ので、この例では、我々は、PersonオブジェクトにネストされたAddressオブジェクトを持っています。いずれもINotifyPropertyChangedを実装しているため、プロパティの変更によってプロパティ変更通知がサブスクライバに送信されます。
バインドを使用すると、Personオブジェクトの通知を変更するサブスクリプションを使用していて、Addressプロパティの変更を「リッスン」しているとします。 Addressプロパティ自体が変更された場合(別のAddressオブジェクトが割り当てられている場合)、ネストされたアドレスオブジェクト(都市または通り)に含まれるデータが変更された場合、通知を受け取らないことになります。
これは、これを処理することが期待されるバインディングインフラストラクチャか、Personの実装でアドレスオブジェクトの通知を変更して「アドレス」の変更として伝播する必要がありますかという疑問があります。
この点をお持ちの場合は、この長い質問を読んでいただきありがとうございます。
コメントありがとうございました!あなたが...誰かが
されていることを、誰かが が Personオブジェクトに通知を変更するためにサブスクライブされたバインディングを使用言う
を言ったときフィル
私はグーグルグーグルでこの問題を発見しました。私には、子供のPropertyChangedイベントを手動で購読してWPFバインディングで動作するようにバブルする必要があるようです。 – loraderon
ロラデロン、私はそれが事実ではないと確信しています - 少なくとも私のテストでは、それは事実であることが判明しています。そして、そうでないと述べる情報はありません。この情報を提供できる情報へのリンクはありますか?ありがとう。 Phil – Phil
私はリンクもありません。私の現在のプロジェクトでは、PropertyChangedイベントをバブルして機能させる必要がありました。私はWPFとMVVMの初心者ですので、私のプロジェクトで特別なことになるかもしれません。 – loraderon