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 인터페이스를 구현할 필요가 없습니다. –
게시물 주셔서 감사합니다. 나는 당신의 모범을 따르고 간단한 테스트 프로젝트를 만들었다. 나는 누군가가 그들의 머리 꼭대기에서 답을 알기를 바랬다. –