WPFでデータバインディングを使用する場合、ソースがINotifyPropertyChanged
インターフェイスで変更されたことが通知されると、ターゲット依存オブジェクトが更新されます。例えば複雑なパスの場合、バインディングターゲットはいつ更新されますか?
:
<TextBlock Text="{Binding Path=SomeField}"/>
テキストフィールドが正しくPropertyChanged(this, new PropertyChangedEventArgs("SomeField"))
がソースから呼び出されるたびSomeFieldの値を反映するために変更されます。
<TextBlock Text="{Binding Path=SomeObjField.AnotherField}"/>
テキストフィールドをソースにPropertyChanged(this, new PropertyChangedEventArgs("SomeObjField"))
のために更新されます:私は、次のような複雑なパスを使用する場合、どのよう
?
中間オブジェクト(SomeObjFieldに含まれるオブジェクト)については、PropertyChanged(this, new PropertyChangedEventArgs("AnotherField"))
はどうなりますか?
ソースオブジェクトおよびフィールドは、依存オブジェクトまたはプロパティではありません。プロパティ/クラスは、次のようなものを実装していると仮定します。
public class Data : INotifyPropertyChanged
{
// INotifyPropertyChanged implementation...
public string SomeField
{
get { return val; }
set
{
val = value;
// fire PropertyChanged()
}
}
public SubData SomeObjField
{
get { return val; }
set
{
val = value;
// fire PropertyChanged()
}
}
}
public class SubData : INotifyPropertyChanged
{
// INotifyPropertyChanged implementation...
public string AnotherField
{
get { return val; }
set
{
val = value;
// fire PropertyChanged()
}
}
}
ターゲットプロパティ(この場合はTextBlock.Text)のみが依存関係プロパティと見なすことができます。 SomeField、SomeObjField、およびAnotherFieldはそうではありません。そうであれば、INotifyPropertyChangedインタフェースを実装する必要はありません。 –
ポストに感謝します。私はあなたの例に従い、簡単なテストプロジェクトを作成しました。誰かが頭の上から答えを知ることを望んでいた。 –