减少WPF View Model锅炉板

时间:2017-09-21 11:13:44

标签: c# wpf

在我的WPF应用程序的视图模型中,我在下面重复了多次代码模式。是否有任何快速简便的方法来减少它,而不采用面向方面的编程等?

private string _scriptExecutionStage;
public string ScriptExecutionStage
{
    get => _scriptExecutionStage;
    set
    {
        if (value != _scriptExecutionStage)
        {
            _scriptExecutionStage = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ScriptExecutionStage"));
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以 - 确实 - 减少属性的样板代码。唉,这不是没有成本的,而是从ViewModelBase类派生你的视图模型

public class ViewModelBase : INotifyPropertyChanged
{
    protected void SetValue<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
    {
        if (AreEqual(field, value))
        {
            return;
        }

        field = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

ViewModelBase课程中,您可以定义所提供的SetValue方法。基本上,您将引用传递给后备字段并使用此引用进行操作。逻辑保持不变。

在你的财产中,你现在可以做到

public string ScriptExecutionStage
{
    get => _scriptExecutionStage;
    set => SetValue(ref _scriptExecutionStage, value);
}

答案 1 :(得分:1)

您可以在SetProperty<T>(...)中创建ViewModelBase

    protected void SetProperty<T>(ref T propertyToSet, T value, [CallerMemberName]string propertyName=null)
    {
        if(!propertyToSet.Equals(value))
        {
            propertyToSet = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }