C# 在不同视图之间传递数据

C# 在不同视图之间传递数据,c#,wpf,mvvm,routed-events,routedevent,C#,Wpf,Mvvm,Routed Events,Routedevent,我正在根据MVVM模型用C#编写一个WPF应用程序。 我有一个由几个视图组成的主窗口:MenuView、ContentView1、ContentView2。等等 菜单视图、ContentView1、ContentView2。,都是XAML树中的堂兄弟姐妹 菜单视图由几个按钮组成。每个按钮都有一个唯一的ID。内容视图(所有)应接收所选(单击)按钮的菜单ID。 i、 e.单击菜单视图中的按钮时,我希望将其ID传递给ContentsView 1、ContentsView 2等 我不确定在视图之间传递数

我正在根据MVVM模型用C#编写一个WPF应用程序。 我有一个由几个视图组成的主窗口:MenuView、ContentView1、ContentView2。等等

菜单视图、ContentView1、ContentView2。,都是XAML树中的堂兄弟姐妹

菜单视图由几个按钮组成。每个按钮都有一个唯一的ID。内容视图(所有)应接收所选(单击)按钮的菜单ID。 i、 e.单击菜单视图中的按钮时,我希望将其ID传递给ContentsView 1、ContentsView 2等

我不确定在视图之间传递数据的最佳方式是什么

我想将事件处理程序附加到位于MenuView中的所有菜单按钮。处理程序在MainWindow类(根视图)中实现。 此处理程序将向所有子视图引发RouteEvent(带隧道选项)

有更好的方法吗?
这是考虑性能问题的最佳方法吗?

这种方法让我想起了我过去很久的java经验,在那里你传递了某种actionstring!?给听众听

将所有按钮绑定到一个处理程序?根据Id,是否要在子视图内执行操作


如果是,您应该将所有按钮绑定到它自己的ICommand,并在处理程序委托内执行操作。

您可以让
菜单视图模型
公开其他(感兴趣的)视图模型将订阅的事件。然后,每个视图都可以绑定到相应的事件并执行它需要执行的操作


这就留下了一个悬而未决的问题,即每个感兴趣的ViewModel如何检测
MenuViewModel
的存在,以便订阅其事件,但是,如果没有更多关于您的应用程序和您选择的MVVM框架的知识,就无法真正回答这个问题。

如果您不在ViewModels之间传递数据,那么您就失去了MVVM的意义。我有时使用MVVMC(C for Controller)模式。控制器(顾名思义)控制ViewModels之间的交互。也许他会给每个视图模型一个MenuViewModel的实例。下一步是使用Unity通过eventaggregator注册ViewModels,或者使用ViewModel定位器(请参见MVVMLight)。是的,这正是我想要做的。如果我将所有按钮绑定到它们的ICommand,如果将来有另一个视图需要更新,会发生什么?这是否意味着我需要更新Excecute方法?正如Jon所说,您可以在一个事件上注册所有viewmodels。在ICommand中,您只需引发不同的事件(xxxPressedEvent、NewUserEvent等)。如果将有一个新的视图(模型),这个对象只需在正确的事件上注册即可。这可能位于所有事件和所有执行方法所在的MenuViewModel中。