我有一个ItemsControl控件。在它的项目中,我展示了很多东西:图像,文本块等。
我有一个搜索'在itemscontrol上实现的功能 - 意味着如果用户从键盘输入一些字母,则会刷新项目控件。我的搜索方法处于代码隐藏状态,只需不到一秒钟。但是,我输入字母和查看结果之间的时间是3-4秒。我有一个窗口关闭命令,我想在显示搜索结果之前的确切时刻。如果我将此命令放在我的Search方法的末尾(在代码隐藏中),关闭窗口和显示项目之间仍有几秒钟的延迟。我认为绑定很慢,这就是为什么我需要捕获绑定完成时调用的事件。在WPF中有这样的事件吗?
在搜索方法完成之前调用OnPropertyChanged事件,这对我没有帮助。
我也尝试过OnDataContextChanged事件,但只调用一次 - 初始化控件时。当用户输入字母并发生新的绑定时,我需要它也被调用。
答案 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.GetBindingExpression
:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression(v=vs.110).aspx
如果您有任何其他问题,请随时提出。
P.S。:不是可能有另一种方法吗?如果您正在使用绑定到ItemsControl
的源集合,则无法对源集合执行搜索/过滤操作,只是让集合绑定更新您的ItemsControl
?