MVVM Light代码段(mvvvminpcset)。需要使用示例

在MVVM Light工具包中,带有mvvmincp的代码片段称为mvvminpcset。

inpcset代码段本身

 public const string MyPropertyPropertyName = "MyProperty";

        private bool _myProperty = false;

        public bool MyProperty
        {
            get
            {
                return _myProperty;
            }
            set
            {
                Set(MyPropertyPropertyName, ref _myProperty, value);
            }
        }

有人可以举一个用法的例子吗? 我想知道上述片段的使用带来了哪些实际好处。

谢谢

简单的inpc

 public const string MyPropertyPropertyName = "MyProperty";

    private bool _myProperty = false;
    public bool MyProperty
    {
        get
        {
            return _myProperty;
        }

        set
        {
            if (_myProperty == value)
            {
                return;
            }

            _myProperty = value;
            RaisePropertyChanged(MyPropertyPropertyName);
        }
    }


评论
SayNo
SayNo

对于您通常实现INPC的方式来说,它只是语法糖:

private bool _MyProperty;
public bool MyProperty
{
    get { return this._MyProperty; }
    set
    {
        if (this._MyProperty != value)
        {
            this._MyProperty = value;
            RaisePropertyChanged(() => this.MyProperty);
        }
    }
}

就我个人而言,我更喜欢通常/冗长的实现,而不是Set,这是唯一的原因,即我喜欢能够放置仅在backing属性的值实际发生变化时才会命中的断点。

点赞
评论
kautem
kautem
  1. Set()将新值与current进行比较,并仅在不同时触发
  2. 还Set()发送两个事件
    RaisePropertyChanging(propertyExpression);
    field = newValue;
    RaisePropertyChanged(propertyExpression);

如果您有代码样式约定,则可以仅使用其中一种方法

  1. MyPropertyPropertyName =“ MyProperty”难以重构,可以使用nameof(MyProperty)或()=> this.ID
  2. 使用Set()时,您有1条代码行与几行代码,也可以添加bug
  3. 可能您将使用代码段为INPC属性生成代码,并且此时没有区别

所以你决定用这个

public int Id
{
    get => _entity.Id;
    set => Set(ref _entity.Id, value);
}
点赞
评论