我正在寻找常见问题的即用型实现 - 以获取有关属性的信息,例如:已更改、初始值等。
我很确定我已经看到类似的东西,但我找不到它。
我在想这样的事情:
public EditableValue<string> Name;
然后是用法:
if(Name.HasChanged)
{
if(string.IsNullOrEmpty(Name.NewValue))
Name.DiscardChanged();
}
你知道解决这个问题的方法吗?
我正在创建基于 WPF 和 MVVM 的项目。
最佳答案
我曾经有过类似的需求,写了一个类,看起来是这样的:
public class EditableValue<T> : BindableBase where T : struct
{
private T _value;
private T? _displayValue;
public T Value
{
get { return _value; }
set
{
_value = value;
OnPropertyChanged(() => Value);
}
}
public T DisplayValue
{
get { return _displayValue ?? Value; }
set
{
_displayValue = value;
OnPropertyChanged(() => DisplayValue);
}
}
public bool HasChanges
{
get { return _displayValue.HasValue; }
}
public void DiscardChanges()
{
_displayValue = null;
OnPropertyChanged(() => DisplayValue);
}
public void ApplyChanges()
{
Value = DisplayValue;
OnPropertyChanged(() => DisplayValue);
OnPropertyChanged(() => Value);
}
}
请注意,它使用 Prism.Mvvm nuget package 中的 BindableBase实现 INotifyPropertyChanged
。
仅绑定(bind)到 DisplayValue
使您能够在 UI 中更改值,通过单击保存(或丢弃)您可以设置 Value
(或重置 DisplayValue
)。
只要没有为 _displayValue
设置任何内容,就会传递实际值。
如果您只对没有显着变化的实际值感兴趣,您也可以绑定(bind)到 Value
。
关于C# EditableValue<T> 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025220/