WPF/Silverlight-跨多个XAML绑定

WPF/Silverlight-跨多个XAML绑定,silverlight,binding,prism,Silverlight,Binding,Prism,大家好 考虑Prism(WPF/Silverlight)的常见场景,其中我们有多个区域,每个区域中都有一个视图(XAML),因此当我们使用鼠标或键盘与一个视图(XAML)交互时,可能会出现一种情况,我们可能需要相应地更改或更新其他视图(恰好是不同的XAML)。例如,在从视图中选择一个项目时,比如说项目面板视图,我们可能希望在其他视图中显示所选项目的详细信息,比如说项目详细信息视图 所以我的问题是, 将一个视图中的元素(XAML)绑定到其他视图中的元素(differentXAML)以实现这些功能是

大家好

考虑Prism(WPF/Silverlight)的常见场景,其中我们有多个区域,每个区域中都有一个视图(XAML),因此当我们使用鼠标或键盘与一个视图(XAML)交互时,可能会出现一种情况,我们可能需要相应地更改或更新其他视图(恰好是不同的XAML)。例如,在从视图中选择一个项目时,比如说项目面板视图,我们可能希望在其他视图中显示所选项目的详细信息,比如说项目详细信息视图

所以我的问题是,

将一个视图中的元素(XAML)绑定到其他视图中的元素(differentXAML)以实现这些功能是一个好主意吗?如果我没有错的话,使用这种方法,我们不需要从一个演示者转到另一个演示者(使用双向绑定等),以便在其他区域更新视图

或者,有什么优雅而简单的方法可以做到这一点吗


.

我建议您看看Prism的EventAggregator()。每个视图(或者视图可以使用触发器响应/更新的视图模型)都可以订阅/发布共享事件。但是,我建议不要简单地响应鼠标单击或键盘事件来引发此共享事件,而是使共享事件有意义(即MyItemSelected或MyItemHidden)。如果您需要更多的帮助或澄清,请告诉我。

有几种方法可以做到这一点,而不会破坏棱镜的规范概念。 正如[MSDN文档][1](第9章:松耦合组件之间的通信)告诉我们的:

在模块之间进行通信时,了解方法之间的差异非常重要,以便您能够最好地确定在特定场景中使用哪种方法。Prism库提供以下通信方法:

 Commanding. Use when there is an expectation of immediate action from the user interaction.
 Event aggregation. For communication across view models, presenters, or controllers when there is not a direct action-reaction expectation.
 Region context. Use this to provide contextual information between the host and views in the host's region. This approach is somewhat similar to the DataContext, but it does not rely on it.
 Shared services. Callers can call a method on the service which raises an event to the receiver of the message. Use this if none of the preceding is applicable.

在您的情况下,应该使用EventAggregator或RegionContext。共享视图模型是可能的,但这是最后的手段

视图是否共享视图模型?stocherilac,它可能共享视图模型,也可能不共享。由于我想使这尽可能灵活,让我们考虑的情况下,不共享一个单一的视图模型。相反,每个视图都有自己的视图模型。