首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertyChanged Fody访问ObservableCollection

PropertyChanged Fody访问ObservableCollection
EN

Stack Overflow用户
提问于 2022-11-24 18:30:46
回答 1查看 20关注 0票数 0

如果PropertyChanged _colors中的相应项正在更改,那么是否可以指示Fody为属性、Color1和Color2生成ObservableCollection事件?

代码语言:javascript
复制
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提取):

代码语言:javascript
复制
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];
EN

回答 1

Stack Overflow用户

发布于 2022-11-24 21:47:29

目前,Color1Color2是只读属性,因此不需要为它们生成PropertyChanged事件。您需要的是在设置字段A时为属性b触发事件的代码。我怀疑任何代码生成器都会这样做(字段没有setter,需要调用事件)。

Fody文档声明

实现INotifyPropertyChanged的所有类都会将通知代码注入属性设置程序。

因此,您最好的尝试是使用私有设置器创建属性(并删除字段_color1&2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74564968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档