0

我想知道在 WPF 中启用控件之间通信的正确机制是什么。我的目标是不使用常规事件,而必须手动连接它们。路由命令(隧道、冒泡)的默认行为似乎是正确的,但我想我错过了一些东西。

路由事件是 WPF 提供的一种新的基础结构,它允许事件沿着可视化树向下传送到目标元素,或者冒泡到根元素。当一个事件被引发时,它会向上或向下“移动”可视化树,在它在途中遇到的订阅该事件的任何元素上调用该事件的处理程序。 注意这个树遍历并没有覆盖整个视觉树,只覆盖了祖先元素

那是来自这篇WPF 文章

使用文章中的图像,我希望“立即元素 #1”启动(引发)一个事件,然后让“立即元素 #2”处理该事件。我想实现这一点,而不必在“根元素”中放置任何代码。

基本上从我的应用程序中的任何地方触发一个事件(保存、更新状态、更改选择等),然后让它在其他地方处理,而两方不知道彼此的任何信息。这可能吗?

我不相信数据绑定是答案。我想使用路由事件/命令,因为它们是在整个树中设计的,而不仅仅是在源代码管理的分支中。也许使用路由事件/命令无法完成,数据绑定就是答案。我只是不知道...

有任何想法吗?

4

2 回答 2

2

最好的机制是重构数据视图并将其与数据模型分离。

创建为每个数据点提供 DependencyProperty 属性(而不是标准 C# 属性)的数据模型,但不提供 UI。数据模型中的值在修改时会相互影响。

然后,您可以将每个 WPF 元素绑定到数据模型中的相应 DependencyProperty。修改一个元素中的值,并更新所有其他元素以反映绑定属性中的任何数据模型更改。

于 2008-10-08T19:10:05.850 回答
1

如果要在元素之间传输数据,Binding是要走的路。网上有很多关于这方面的教程和书籍。

如果要实现Style更改,则可以使用DataTriggers,它也使用绑定。

如果不将其连接到公共根中,就无法在不相关的控件之间发送传统意义上的事件。

于 2008-10-08T18:58:04.283 回答