2014-11-23 80 views
0

这是我的问题,当应用程序启动时,用户选择文本框。不输入任何用户点击标签来选择下一个文本框。这应该在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方法甚至被称为时如果目的是要立即触发验证状态(这是我从获取用户不输入任何

+1

“这应该触发setter方法” - 请详细解释为什么你相信这是真实的。如果'TextBox'的内容没有改变,为什么要调用视图模型的setter?如果你想知道控件什么时候失去焦点,为什么不处理'LostFocus'事件呢?当数值没有真正改变时,你为什么要做一个属性更改的通知和数据验证?我觉得这个问题很混乱。 – 2014-11-23 21:24:19

+0

当用户没有输入任何东西到文本框,只是移动到下一个控制,然后我需要能够显示验证错误。但如果setter没有被调用,那么我不能验证该字段是否为空。 – hs2d 2014-11-23 21:30:23

+0

看看Binding类 – Maxwe11 2014-11-23 21:32:43

回答

0

你“需要调用的二传手yway“),那么为什么不只是在Window级别使用Loaded事件并将其分配为String.Empty,以便无论何时都会触发验证码。

甚至更​​好,使用IDataErrorInfo其中getter呼叫从而意味着第一次TextBox负载,IDataErrorInfo接口将被调用,属性验证过程中进行验证。