这是我的问题,当应用程序启动时,用户选择文本框 . 没有输入任何内容,用户单击选项卡以选择下一个文本这应该在viewmodel中触发第一个文本框绑定的setter方法 . 但似乎没有发生 .
在viewmodel中:
private string _username;
public string Username
{
get { return _username; }
set
{
_username = value;
RaisePropertyChanged("Username");
Validator.Validate(() => Username);
}
}
在xaml中:
<TextBox Text="{Binding Username, Mode=TwoWay, ValidatesOnDataErrors=True}" />
当我开始输入内容时,会调用用户名setter方法,然后将其擦除并将焦点移动到其他位置 . Datacontext已正确设置并正常工作 .
1)用户将焦点设置为用户名文本框,不输入任何内容
2)用户将焦点移动到表单上的下一个项目
结果=当用户名文本框失去焦点时,不会调用视图模型中的Setter方法
我需要的结果=即使用户没有输入任何内容,也会调用Setter方法
1 回答
如果打算立即触发验证状态(这是我从"need to call the setter anyway"获得的),那么为什么不在
Window
级别使用Loaded
事件并分配String.Empty
以便无论如何都会触发验证代码?或者甚至更好,使用
IDataErrorInfo
在getter
调用期间执行验证,这意味着TextBox
第一次加载,将调用IDataErrorInfo
接口并验证属性 .