【发布时间】:2014-11-23 21:19:53
【问题描述】:
这是我的问题,当应用程序启动时,用户选择文本框。无需输入任何内容,用户单击选项卡即可选择下一个文本框。这应该为第一个文本框绑定触发 viewmodel 中的 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}" />
当我开始输入内容时,会调用用户名设置方法,然后将其删除并将焦点移至其他内容。 Datacontext 已正确设置并正常工作。
1) 用户将焦点设置到用户名文本框,不输入任何内容
2) 用户将焦点移至表单上的下一项
结果 = 当用户名文本框失去焦点时,视图模型中的 Setter 方法不会被调用
我需要的结果 = 即使用户没有输入任何内容,也会调用 Setter 方法
【问题讨论】:
-
“这应该触发 setter 方法”——请准确解释为什么您认为这是真的。如果
TextBox的内容没有改变,为什么要调用视图模型的setter?如果您想知道控件何时失去焦点,为什么不直接处理LostFocus事件呢?当值实际上没有改变时,为什么要进行属性更改通知和数据验证?我觉得这个问题很混乱。 -
当用户没有在文本框中输入任何内容而只是移动到下一个控件时,我需要能够显示验证错误。但是如果没有调用 setter,那么我无法验证该字段是否为空。
-
查看Binding类的UpdateSourceTrigger属性
-
@Maxwe11,文本框的默认值为 LostFocus,这就是我想要的。所以我不需要重新设置。
-
@PeterDuniho,是的,我可以在后面的代码中处理
LostFocus事件。但是当表单上有很多文本框时,我必须为所有文本框都这样做......