在我的WPF应用程序的视图模型中,我在下面重复了多次代码模式。是否有任何快速简便的方法来减少它,而不采用面向方面的编程等?
private string _scriptExecutionStage;
public string ScriptExecutionStage
{
get => _scriptExecutionStage;
set
{
if (value != _scriptExecutionStage)
{
_scriptExecutionStage = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ScriptExecutionStage"));
}
}
}
答案 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));
}
}