1

例如,我有这样的属性:

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}

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

谢谢

4

2 回答 2

1

您的代码的问题是您想要覆盖通过在 setter 方法中绑定分配的值。这将不起作用,因为控件不会在下一个属性更改时更新,原因很简单,它通过设置属性调用了它。要对您的值实施验证,请尝试这种内置机制。

于 2012-12-16T21:51:41.960 回答
0

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

于 2012-12-17T14:56:05.347 回答