WPF将文本框绑定到ViewModel

Son*_*oul 26 .net c# data-binding wpf mvvm

我有一个文本框绑定到我的ViewModel上名为DatabaseFilter的属性

这是属性的实现

public string DatabaseFilter {
    get { return _databaseFilter; }
    set { 
        _databaseFilter = value;
        FilterDatabases();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试根据文本框中键入的内容触发过滤.

问题是,当文本框失去焦点时会触发setter.因此,在用户按下TAB之前,键入文本框不会执行任何操作.

是否可以通过绑定每次按键进行视图模型下的绑定更新?我想避免添加键向下/向上事件,以保持UI /代码尽可能干净.

Mav*_*rik 43

UpdateSourceTrigger在TextBox上设置为PropertyChanged(默认为LostFocus)

  • 给所有拒绝完全有效答案的人:如果您自己无法做到,请至少发表评论以说出您希望看到的改进之处 (2认同)

Jar*_*rek 23

您需要UpdateSourceTrigger=PropertyChanged在绑定表达式上设置属性,例如

<TextBox Text="{Binding Path=DatabaseFilter, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)

还有不同的值可用,例如:Explicit- 当您需要显式调用绑定更新时; LostFocus- 这是默认设置TextBox,在控件失去焦点后更新绑定.

您需要记住,如果您的过滤操作在UI线程上执行,则每次击键后进行过滤可能不是最明智的事情,因为此过滤产生的延迟可能会严重影响用户体验.如果你是肯定的,你需要在每次击键后进行过滤,请确保过滤很快(例如,只有很少的项可以过滤),或者你将在后台线程中过滤.


cey*_*yko 5

更改绑定以在属性更改时更新源:

<TextBox Text="{Binding DatabaseFilter, UpdateSourceTrigger=PropertyChanged}">