C#EditableValue <t>实现

时间:2015-06-24 11:23:42

标签: c# wpf mvvm

我正在寻找常见问题的即用型实施 - 获取有关属性的信息,例如:已更改,初始值等。

我很确定我已经看到过这样的事情,但我找不到它。

我正在考虑这样的事情:

<p>{{ trails }}</p>

然后用法:

public EditableValue<string> Name;

你知道任何解决方案吗?

我正在基于WPF和MVVM创建项目。

2 个答案:

答案 0 :(得分:0)

我建议您尝试在INotifyPropertyChanged课程中实施EditableValue,然后听取属性更改事件。

如果您尝试共享代码,那么我们就可以解决您可能遇到的任何问题。

答案 1 :(得分:0)

我曾经有类似的需求,写了一个类,看起来像这样:

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

仅绑定到DisplayValue,您可以更改用户界面中的值,点击保存(或放弃)即可设置Value(或重置DisplayValue)。 只要没有为_displayValue设置任何内容,就会传递实际值。 如果您只对实际值感兴趣而没有未完成的更改,也可以绑定到Value