我有这样的属性:
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中的选定值?它应该像开头一样空洞。
由于
答案 0 :(得分:1)
您的代码存在的问题是您希望覆盖setter方法中绑定指定的值。这不起作用,因为控件不会在下一次属性更改时更新,原因很简单,因为它已通过设置属性来调用它。要对您的值实施验证,请尝试this内置机制。
答案 1 :(得分:0)
我更喜欢使用IDataErrorInfo而不使用属性设置器逻辑。主要优点是您的viewmodel和视图中的属性值始终相同,并且您的viewmodel具有值是否正确的信息。