wpf - 控件完成绑定(bind)时调用的事件

标签 wpf events data-binding

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

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

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

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

最佳答案

当您在 WPF 中的源属性和目标依赖属性之间建立数据绑定(bind)时,此 Binding实际上翻译成BindingExpression对象,它负责在适当的时刻更新源和目标的繁重工作。

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

唯一的方法是设置 UpdateSourceTriggerExplicit当您定义绑定(bind)时,在后面的代码中获取绑定(bind)表达式并手动更新源和目标 - 然后您就可以完全控制并可以在此场景中封装常用功能。

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

如果您还有任何疑问,请随时提问。

PS:难道没有其他方法可以做到这一点吗?如果您使用的是绑定(bind)到 ItemsControl 的源集合,您不能对源集合执行搜索/过滤操作并让集合绑定(bind)更新您的 ItemsControl

关于wpf - 控件完成绑定(bind)时调用的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25527958/

相关文章:

c# - FFMPEG 将音轨连接到更长的视频轨道时,音频循环

java - 从 UI 向组合框添加值?

Angular 可观察到的错误不会使用 ChangeDetectionStrategy.OnPush 刷新界面

asp.net-mvc - 如何在 ASP.NET MVC 中将嵌套数组元素属性值绑定(bind)到 TextBox

javascript - 如何在 JavaScript 中不断增加范围输入( slider )的值,直到达到最大值?

c# - 如何将图像转换为字节数组

c# - 我的依赖属性仅以一种方式绑定(bind)

c# - 在单元格值中绑定(bind) WPF DataGrid 列标题文本

java - 对于一个类中的多个操作,哪个更好? actionPerformed() 中的匿名内部类或 if 语句?

jquery - Google Closure 事件委托(delegate) a'la jQuery live/on