Кой е най-добрият начин в c# за уведомяване на свойството, променено в полето на елемент без 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 текст. Правя webRequest за получаване на нов екземпляр наMyClass
и го запазвам на_item
._item.Field
не може да уведоми за промяна на свойството, защотоField
е само get, който анализира xml файла. - person A.Pissicat   schedule 11.08.2016