控件完成绑定时调用的事件

时间:2014-08-27 13:04:10

标签: wpf events data-binding

我有一个ItemsControl控件。在它的项目中,我展示了很多东西:图像,文本块等。

我有一个搜索'在itemscontrol上实现的功能 - 意味着如果用户从键盘输入一些字母,则会刷新项目控件。我的搜索方法处于代码隐藏状态,只需不到一秒钟。但是,我输入字母和查看结果之间的时间是3-4秒。我有一个窗口关闭命令,我想在显示搜索结果之前的确切时刻。如果我将此命令放在我的Search方法的末尾(在代码隐藏中),关闭窗口和显示项目之间仍有几秒钟的延迟。我认为绑定很慢,这就是为什么我需要捕获绑定完成时调用的事件。在WPF中有这样的事件吗?

在搜索方法完成之前调用OnPropertyChanged事件,这对我没有帮助。

我也尝试过OnDataContextChanged事件,但只调用一次 - 初始化控件时。当用户输入字母并发生新的绑定时,我需要它也被调用。

1 个答案:

答案 0 :(得分:2)

当您在WPF中的源属性和目标依赖项属性之间建立数据绑定时,此Binding实际上会转换为BindingExpression对象,这会更新源和目标在适当的时候。

不幸的是,BindingExpression在更新内容时不提供事件,您可以在此处看到:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression(v=vs.110).aspx

唯一的方法是在定义绑定时将UpdateSourceTrigger设置为Explicit,在代码中获取绑定表达式并手动更新源和目标 - 然后您可以完全控制并且可以封装您在此方案中的常用功能。

您可以使用BindingExpression静态方法获取BindingOperations.GetBindingExpressionhttp://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression(v=vs.110).aspx

如果您有任何其他问题,请随时提出。

P.S。:不是可能有另一种方法吗?如果您正在使用绑定到ItemsControl的源集合,则无法对源集合执行搜索/过滤操作,只是让集合绑定更新您的ItemsControl