C#可编辑值<;T>;实施
本文关键字:gt 实施 lt 编辑 | 更新日期: 2023-09-27 17:59:17
我正在寻找常见问题的现成实现,以获取有关属性的信息,如:已更改、初始值等。
我很确定我已经看到了这样的事情,但我找不到。
我在想这样的事情:
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包中的BindableBase来实现INotifyPropertyChanged
。
仅绑定到DisplayValue
就可以更改UI中的值,通过单击保存(或放弃)可以设置Value
(或重置DisplayValue
)。只要没有为_displayValue
设置任何内容,就会传递实际值。如果您只对没有未完成更改的实际值感兴趣,也可以绑定到Value
。
我建议您尝试在EditableValue
类中实现INotifyPropertyChanged
,然后监听属性更改事件。
如果您尝试共享您的代码,那么我们可能能够解决您可能遇到的任何问题。