[英]PropertyChanged Fody accesses ObservableCollection
如果 ObservableCollection _colors 中的相應項目發生變化,是否可以指示 Fody 為屬性 Color1 和 Color2 生成 PropertyChanged 事件?
public class MyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Name { get; set; }
public Brush Color1 => _colors[0];
public Brush Color2 => _colors[1];
private ObservableCollection<Brush> _colors;
public MyModel()
{
_colors = new ObservableCollection<Brush>()
{
Brushes.Transparent,
Brushes.Black,
};
}
public void DoSomething()
{
_colors[0] = Brushes.Green;
_colors[1] = Brushes.Red;
}
protected void OnPropertyChanged(PropertyChangedEventArgs eventArgs)
{
PropertyChanged?.Invoke(this, eventArgs);
}
}
對於 Name 屬性,將生成事件,但不會為 Color1 和 Color2 生成(請參閱 ILSpy 摘錄):
public string Name
{
[CompilerGenerated]
get
{
return <Name>k__BackingField;
}
[CompilerGenerated]
set
{
if (!string.Equals(<Name>k__BackingField, value, StringComparison.Ordinal))
{
<Name>k__BackingField = value;
OnPropertyChanged(<>PropertyChangedEventArgs.Name);
}
}
}
public Brush Color1 => _colors[0];
public Brush Color2 => _colors[1];
目前Color1
和Color2
是只讀屬性,因此不需要為它們生成PropertyChanged
事件。 您想要的是在設置字段b
時觸發屬性A
事件的代碼。 我懷疑任何代碼生成器都會這樣做(字段沒有設置器,需要在其中調用事件)。
Fody
文檔 state
所有實現 INotifyPropertyChanged 的類都將通知代碼注入到屬性設置器中。
因此,也許您最好的嘗試是使用私有設置器創建屬性(並刪除您的字段_color1&2
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.