如何在WPF中阻止在setter中赋值

时间:2012-12-16 21:34:20

标签: c# wpf mvvm

我有这样的属性:

private string foobar;

    public string Foobar
    {
        get
        {
            return this.foobar;
        }

        set
        {
            if (value != this.foobar)
            {
                // here I want to check if value is correct
                if(value != something)
                {
                   this.foobar = value;
                   this.NotifyPropertyChanged("Foobar");
                 }
                 else
                 {
                    value = null;
                    this.foobar = null;
                    this.NotifyPropertyChanged("Foobar");
                 }
            }
        }
    }

属性绑定(MVVM)到Listview:  SelectedItem="{Binding Foobar, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}

当用户更改列表中的值时,会更改selecteditem并在setter中设置值。当用户选择了不正确的值时,我的代码是正确的,并且分配了foobar null。但是在WPF中仍然显示选定的值。当我在getter中设置断点时,我可以看到它也返回null。如何刷新WPF以清除listview中的选定值?它应该像开头一样空洞。

由于

2 个答案:

答案 0 :(得分:1)

您的代码存在的问题是您希望覆盖setter方法中绑定指定的值。这不起作用,因为控件不会在下一次属性更改时更新,原因很简单,因为它已通过设置属性来调用它。要对您的值实施验证,请尝试this内置机制。

答案 1 :(得分:0)

我更喜欢使用IDataErrorInfo而不使用属性设置器逻辑。主要优点是您的viewmodel和视图中的属性值始终相同,并且您的viewmodel具有值是否正确的信息。