在沒有set
但是get
取決於其他字段的情況下,c#中通知屬性在項目字段中更改的最佳方式是什麼?當字段依賴於另一個字段時,通知屬性更改的最佳方式
例如:
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
}
什麼設置Item
何時起一個對的PropertyChanged的"Field"
最好的方式?我想在設置Item
時撥打OnPropertyChanged("Field");
,但如果我有很多字段,代碼將很快變得難看且不可維護。
編輯:
我不知道是否有一個功能/方法/屬性的工作是這樣的:
[DependOn(Item)]
public object Field
{
get
{
return _item.Field;
}
}
=>當Item
變化,所有的視場將通知更改的屬性。
它存在嗎?
你可以實現的inotify在''MyClass' MyClass' –
'Field'不會改變,實例_item被另一個替代。在我的例子中,'MyClass'包含一個xml文本。我做了一個webRequest獲得'MyClass'的新實例,並將它保存在'_item'中。 '_item.Field'不能通知已更改的屬性,因爲'Field'只是解析xml文件的get。 –