在TextBox失去焦点后调用Setter
问题描述:
这是我的问题,当应用程序启动时,用户选择文本框。不输入任何用户点击标签来选择下一个文本框。这应该在viewmodel中为第一个文本框绑定触发setter方法。但似乎没有发生。在TextBox失去焦点后调用Setter
在视图模型:
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方法甚至被称为时如果目的是要立即触发验证状态(这是我从获取用户不输入任何
答
你“需要调用的二传手yway“),那么为什么不只是在Window
级别使用Loaded
事件并将其分配为String.Empty
,以便无论何时都会触发验证码。
甚至更好,使用IDataErrorInfo
其中getter
呼叫从而意味着第一次TextBox
负载,IDataErrorInfo
接口将被调用,属性验证过程中进行验证。
“这应该触发setter方法” - 请详细解释为什么你相信这是真实的。如果'TextBox'的内容没有改变,为什么要调用视图模型的setter?如果你想知道控件什么时候失去焦点,为什么不处理'LostFocus'事件呢?当数值没有真正改变时,你为什么要做一个属性更改的通知和数据验证?我觉得这个问题很混乱。 – 2014-11-23 21:24:19
当用户没有输入任何东西到文本框,只是移动到下一个控制,然后我需要能够显示验证错误。但如果setter没有被调用,那么我不能验证该字段是否为空。 – hs2d 2014-11-23 21:30:23
看看Binding类 – Maxwe11 2014-11-23 21:32:43