При использовании привязки данных в WPF объект целевой зависимости обновляется, когда он уведомляется о том, что источник был изменен через интерфейс INotifyPropertyChanged
.Когда привязка цели обновляется для сложных путей?
Например:
<TextBlock Text="{Binding Path=SomeField}"/>
В текстовом поле будет меняться, чтобы правильно отражать стоимость SomeField всякий раз, когда PropertyChanged(this, new PropertyChangedEventArgs("SomeField"))
вызывается из источника.
Что делать, если я использую сложный путь, как следующее:
<TextBlock Text="{Binding Path=SomeObjField.AnotherField}"/>
Будет ли текстовое поле обновляется для PropertyChanged(this, new PropertyChangedEventArgs("SomeObjField"))
на источник?
Как насчет PropertyChanged(this, new PropertyChangedEventArgs("AnotherField"))
на промежуточном объекте (объект, содержащийся внутри SomeObjField)?
Исходные объекты и поля НЕ являются объектами или свойствами зависимостей! Предположим, что свойство/классы реализованы что-то вроде следующего:
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()
}
}
}
Только свойство target (TextBlock.Text в этом случае) можно считать свойством зависимости. SomeField, SomeObjField и AnotherField - нет. Если бы они были, не было бы необходимости реализовывать интерфейс INotifyPropertyChanged. –
Спасибо за сообщение. Я выполнил ваш пример и создал простой тестовый проект. Я надеялся, что кто-то узнает ответ от верхней части головы. –