WPF绑定文本框视图模型
我有一个绑定到名为DatabaseFilterWPF绑定文本框视图模型
这里对我的ViewModel属性的文本框是属性
public string DatabaseFilter {
get { return _databaseFilter; }
set {
_databaseFilter = value;
FilterDatabases();
}
}
,你可以看到,我试图实施根据输入到文本框中的内容触发一个过滤。
问题是,setter在文本框失去焦点时被触发。因此,直到用户按TAB,才能在文本框中输入内容。
是否有可能使绑定更新下属viewmodel与每个按键通过绑定?我想避免不得不添加按键向下/向上事件,以尽可能保持UI /代码隐藏。
你的文本框设置UpdateSourceTrigger
到PropertyChanged
(默认为LostFocus
)
在虚拟机“FilterDatabaseCommand”中创建一个命令,将文本框的事件“TextChanged”绑定到该命令(使用EventToCommand行为)。
或者简单地改变你的代码如下:
public string DatabaseFilter {
get { return _databaseFilter; }
set {
if(_databaseFilter != value) {
_databaseFilter = value;
FilterDatabases();
}
}
}
不知道你的代码示例如何解决他的问题。 – Mikeb 2011-03-17 14:19:11
谢谢,虽然改变属性代码不会有太大的作用,因为它只是在失去焦点之前才被调用。创建命令将工作,但在我的情况下,我更喜欢简单的解决方案,不需要命令,只需简单的绑定。与上面的建议更改UpdateSourceTrigger属性,并做了我所需要的。 – 2011-03-17 14:23:07
UpdateSourceTrigger=PropertyChanged
要解决这个问题,你
就是这样,谢谢! – 2011-03-17 14:20:05
更改绑定每当属性发生变化时更新源代码:
<TextBox Text="{Binding DatabaseFilter, UpdateSourceTrigger=PropertyChanged}">
在绑定上使用Binding.UpdateSourceTrigger
属性。默认的更新源触发器是焦点丢失。您可以更改它,以便每次文本框中的文本发生更改时都会发生绑定。
看到http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx
你需要设置你的绑定表达式,如UpdateSourceTrigger=PropertyChanged
财产
<TextBox Text="{Binding Path=DatabaseFilter, UpdateSourceTrigger=PropertyChanged}" />
也有可用的不同的值,如:Explicit
- 当你需要显式调用绑定更新; LostFocus
- 这是TextBox
的默认值,在控件失去焦点后更新绑定。
您需要记住,如果您的过滤操作在UI线程上执行,则在每次击键后进行过滤可能不是最明智的做法,因为用户体验可能会受到此过滤所产生的延迟的严重影响。如果您肯定,每次击键都需要过滤,确保过滤快速(例如,只有少数项目要过滤),或者您将在后台线程中过滤。
就是这样,谢谢! – 2011-03-17 14:20:21
高兴地帮助:) – Maverik 2011-03-17 14:21:10
向所有人投下一个完全有效的答案:有礼貌至少贴个评论来说出你想看到改进的东西,如果你自己做不到的话 – Maverik 2014-05-23 12:55:26