Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Prism(CAL)在局部作用域中合成事件_C#_Prism - Fatal编程技术网

C# 使用Prism(CAL)在局部作用域中合成事件

C# 使用Prism(CAL)在局部作用域中合成事件,c#,prism,C#,Prism,我开始用一个小应用程序来训练Prism(CAL),遇到了一些问题 我正在创建MainView的多个实例,MainView本身包含一些区域,并在Shell中显示它们。 我正在使用局部范围的区域来轻松处理MainView中的视图注入 目前,我正在寻找一种在MainView中的视图(viewModels)之间进行通信的方法。复合事件可以做到这一点,但当我发布这些事件时,它们会在我的MainView的所有实例中处理,这是我真正不想要的 有没有一种方法可以引发“局部范围”的复合事件,比如局部范围的区域?或

我开始用一个小应用程序来训练Prism(CAL),遇到了一些问题

我正在创建MainView的多个实例,MainView本身包含一些区域,并在Shell中显示它们。 我正在使用局部范围的区域来轻松处理MainView中的视图注入

目前,我正在寻找一种在MainView中的视图(viewModels)之间进行通信的方法。复合事件可以做到这一点,但当我发布这些事件时,它们会在我的MainView的所有实例中处理,这是我真正不想要的


有没有一种方法可以引发“局部范围”的复合事件,比如局部范围的区域?或者在我的例子中,视图之间有更好的交流方式吗?

将表单发送者作为参数传递。(无论如何,必须有一种方法来区分应用程序的窗口-使用它。)收到事件时,检查当前表单引用是否等于发件人(或检查表单“键”)。

将表单发件人作为参数传递。(无论如何,必须有一种方法来区分应用程序的窗口-使用它。)收到事件时,检查当前表单引用是否等于发件人(或检查表单“键”)。

也可以创建本地范围的事件聚合器,并在主视图中创建的子UnityContainer中注册(位于创建本地范围区域的同一位置)


这相当于本地作用域imho。

还可以创建本地作用域EventAggregator,并在主视图中创建的子UnityContainer中注册(在创建本地作用域的同一位置)


这相当于局部范围的区域imho。

经过大量讨论后,选择了EventAggregator。如果其他人处于相同的情况,我们的思维过程可能会帮助他们:

(问题陈述:参考我之前的评论)

主视图(ViewModel)具有区域以容纳来自其他模块的视图,并且还形成TabItem视图,负责清理自身及其包含的子视图。因此,在TabItem关闭事件中,此主视图(ViewModel)应通知其子视图正常关闭

EventAggregator和.Net事件处理都从各个方面进行了彻底的探索,作为发送关闭消息的潜在候选者

由于在Prism解耦环境中,主视图在技术上应该不知道其子视图,反之亦然,因此选择了EventAggregator

事件聚合器的一个问题是它将事件发布到整个应用程序,但我们的要求是过滤来自正在关闭的tabitemview的事件。EventAggregator设计用于使用过滤器验证关闭请求是否来自同一tabitemview(我们对每个tabItem使用了作用域regionmanager,并且该作用域管理器被用作过滤器)只有在执行关闭操作后,它才会执行关闭操作。这确保在一个选项卡中触发关闭不会关闭恰好具有相同regionname的其他选项卡中的子视图

谢谢,
RDV

经过多次讨论,我们选择了EventAggregator。如果其他人处于相同的情况,我们的思考过程可能会帮助他们:

(问题陈述:参考我之前的评论)

主视图(ViewModel)具有区域以容纳来自其他模块的视图,并且还形成TabItem视图,负责清理自身及其包含的子视图。因此,在TabItem关闭事件中,此主视图(ViewModel)应通知其子视图正常关闭

EventAggregator和.Net事件处理都从各个方面进行了彻底的探索,作为发送关闭消息的潜在候选者

由于在Prism解耦环境中,主视图在技术上应该不知道其子视图,反之亦然,因此选择了EventAggregator

事件聚合器的一个问题是它将事件发布到整个应用程序,但我们的要求是过滤来自正在关闭的tabitemview的事件。EventAggregator设计用于使用过滤器验证关闭请求是否来自同一tabitemview(我们对每个tabItem使用了作用域regionmanager,并且该作用域管理器被用作过滤器)只有在执行关闭操作后,它才会执行关闭操作。这确保在一个选项卡中触发关闭不会关闭恰好具有相同regionname的其他选项卡中的子视图

谢谢,
RDV

谢谢,我正在考虑使用键作为事件参数之一。我只是想知道,如果我在每个小区域的任何地方都有复合事件,它会影响整个应用程序的性能吗。一旦你向global eventaggregator发送事件,每个订阅者都必须解决它。因此答案是“不是在每个小区域,而是仅在区域用户中“谢谢,我正在考虑使用键作为事件参数之一。我只是想知道,如果我在每个小区域的任何地方都有复合事件,它会影响整个应用程序的性能吗……一旦你向global eventaggregator发送事件,每个订阅者都必须解决它。因此答案是不是在每个小区域中,而是仅在区域订户中