C# 文本框失去焦点后未调用Setter

C# 文本框失去焦点后未调用Setter,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的问题是,当应用程序启动时,用户选择文本框。在不键入任何内容的情况下,用户单击选项卡以选择下一个文本框。这将触发viewmodel中第一个文本框绑定的setter方法。但这似乎没有发生 在viewmodel中: private string _username; public string Username { get { return _username; } set { _username = value; RaiseProperty

我的问题是,当应用程序启动时,用户选择文本框。在不键入任何内容的情况下,用户单击选项卡以选择下一个文本框。这将触发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}" />
当我开始键入某个内容,然后删除该内容并将焦点移到其他内容时,就会调用Username setter方法。Datacontext已正确设置并正常工作

1用户将焦点设置为用户名文本框,不键入任何内容

2用户将焦点移动到表单上的下一项

当Username textbox失去焦点时,不会调用视图模型中的Result=Setter方法


Result i need=Setter方法被调用,即使用户没有键入任何内容

,如果目的是立即触发验证状态,这就是我从您调用Setter的需求中得到的结果,那么,为什么不在窗口级别使用已加载的事件并分配String.Empty,以便不管怎样都触发验证代码呢


或者更好的方法是,使用IDataErrorInfo,它在getter调用期间执行验证,这意味着首次加载文本框时,将调用IDataErrorInfo接口并验证属性。

这将触发setter方法-请准确解释为什么您认为这是真的。如果文本框的内容没有更改,为什么要调用视图模型的setter?如果您想知道控件何时失去焦点,为什么不直接处理LostFocus事件呢?当值没有实际更改时,为什么要执行属性更改通知和数据验证?我发现这个问题非常令人困惑。当用户并没有在文本框中输入任何内容,只是移动到下一个控件时,我需要能够显示验证错误。但是如果未调用setter,则无法验证字段是否为空class@Maxwe11,文本框的默认值是LostFocus,这就是我想要的。所以我不需要再设置一次。@PeterDuniho,是的,我可以在代码背后处理LostFocus事件。但是当表单上有很多文本框时,我就必须为所有的文本框都这样做。。。