我正在尝试在 MVVM 中的文本框上实现一些简单的验证
public string Property
{
get
{
if (App.PropertyStorageContainer != null)
{
return App.PropertyStorageContainer.Property;
}
else
{
return null;
}
}
set
{
App.PropertyStorageContainer.Property = value;
RaisePropertyChanged("Property");
}
}
然后在我的 PropertyStorageContainer 类中
private string _property;
public string Property
{
get
{
return App.PropertyStorageContainer.Property;
}
set
{
if(value meets some condition)
{
_property = value;
}
else
{
_property = someothervalue;
}
}
}
.
<TextBox Width="50" TextAlignment="Center" Text="{Binding Property, Mode=TwoWay, NotifyOnValidationError=True}" MaxLength="3"></TextBox>
这样做的目的是验证盒子里有什么。现在,如果我直接从我的代码中设置这个值,那么一切都会按我的预期工作。它尝试 SET 值,然后调用 RaiseProperyChanged,然后 GET 值(因为验证可能与最初输入的值不同)。检索到的最终值确实显示在视图上,所以我知道 TwoWay 绑定正在工作。
我遇到的问题是当 SET 的输入来自用户绑定的 XAML 属性/直接时。在这种情况下,调用了 SET 方法,执行了验证,但 GET 永远不会发生。这会导致屏幕上的文本框中保留未验证的值。
我的第一个问题是这是一个错误还是预期的行为?我可以看到,当输入直接来自用户时,他们可能如何尝试通过删除最后一个 GET 来节省性能,因为 GET 应该没有什么新东西。但如果不是,那么我的所有设置方式可能会干扰 GET 被调用。
第二个问题当然是解决这个问题的任何建议。我已经阅读了一些关于其他验证方法的建议,但是我的程序已经在 PROD 上运行,并且建议的大多数更改都涉及到我的大量返工,所以我希望找到一种方法让它调用 GET any设置属性的时间。