Как лучше всего в С# уведомить об изменении свойства в поле элемента без set
, но get
зависит от других полей?
Например :
public class Example : INotifyPropertyChanged
{
private MyClass _item;
public event PropertyChangedEventHandler PropertyChanged;
public MyClass Item
{
get
{
return _item;
}
protected set
{
_item = value;
OnPropertyChanged("Item");
}
}
public object Field
{
get
{
return _item.Field;
}
}
#if !C#6
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#else
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
// => can be called in a set like this:
// public MyClass Item { set { _item = value; OnPropertyChanged();} }
// OnPropertyChanged will be raised for "Item"
}
#endif
}
Как лучше всего поднять PropertyChanged для "Field"
при установке Item
? Я хотел вызвать OnPropertyChanged("Field");
при установке Item
, но если бы у меня было много полей, код быстро стал бы уродливым и непригодным для сопровождения.
Редактировать:
Интересно, есть ли функция/метод/атрибут, работающий следующим образом:
[DependOn(Item)]
public object Field
{
get
{
return _item.Field;
}
}
=> Когда Item
изменится, все зависимые поля уведомят об изменении свойства.
Он существует?
MyClass
- person Mong Zhu   schedule 11.08.2016Field
вMyClass
не меняется, что экземпляр _item заменяется другим. В моем случаеMyClass
содержит текст xml. Я делаю веб-запрос, получаю новый экземплярMyClass
и сохраняю его на_item
._item.Field
не может уведомить об изменении свойства, потому чтоField
- это только получатель, который анализирует файл xml. - person A.Pissicat   schedule 11.08.2016