C# 在WPF中使用MVVM从UserControl冒泡事件。。?

C# 在WPF中使用MVVM从UserControl冒泡事件。。?,c#,wpf,events,mvvm,user-controls,C#,Wpf,Events,Mvvm,User Controls,首先,我想让大家知道,我对MVVM的概念非常陌生,我已经广泛地寻找了一些关于我想做什么的解释,但是没有用 在我正在开发的程序中,我有一个用户控件,上面有几个按钮,需要控制主窗口的导航。我有3个不同的“页面”,我想能够在我的主窗口之间切换。我决定(不管出于什么原因,如果这不是最好的方法,请纠正我)对每个页面使用UserControl,并将可见性切换到正确的页面,而不是页面。我需要数据在切换时保持不变,所以我认为创建新的Usercontrols实例是行不通的 我的问题是:如何将事件从我的“NavBa

首先,我想让大家知道,我对MVVM的概念非常陌生,我已经广泛地寻找了一些关于我想做什么的解释,但是没有用

在我正在开发的程序中,我有一个用户控件,上面有几个按钮,需要控制主窗口的导航。我有3个不同的“页面”,我想能够在我的主窗口之间切换。我决定(不管出于什么原因,如果这不是最好的方法,请纠正我)对每个页面使用UserControl,并将可见性切换到正确的页面,而不是页面。我需要数据在切换时保持不变,所以我认为创建新的Usercontrols实例是行不通的

我的问题是:如何将事件从我的“NavBarView”冒泡到主窗口,以允许我切换可见性,但以MVVM的方式?我知道我可能完全走错了方向,我很乐意接受任何关于实现这一导航的更好方法的建议


我必须使用WPF,所以WinForms不是一个选项。WinForms的透明度和自定义控件太多。

如果可能,我会将“导航栏”作为主窗口的一部分,并使用它来控制窗体中的子控件。我会小心嵌套用户控件。如果你能避免的话,我会(关键的指示是你会在其他地方重复使用它)。不久前我接管了一个项目,它有一个主窗口,有3个独立的高度耦合的用户控件,它们必须一起工作,这是一场噩梦。我能让它安全工作的唯一方法是让它们都将数据上下文设置为相同的视图模型。如果我必须从头开始做的话,我会采取一种完全不同的方法,只看一个视图

昨晚我也有同样的想法,在我把它弄得一团糟之后。我正在考虑使用绑定到CurrentPage属性的框架。我的问题是,如何在视图更改期间保持数据?我不能在另一个视图中使用一个视图中的数据吗?他们不需要共享视图模型吗?是的,您需要将视图的数据上下文设置为同一视图模型。然后,可以使用多种方法确定显示的内容。想想向导是如何使用的-您可以在视图中使用根据视图模型上的设置触发显示的模板-因此它是自动的。因此,我更改了MainViewModel的SelectedPage属性,这将反过来通知并自动更改框架中显示的页面?是-只要您在xaml中设置了显示内容。您需要为此使用模板绑定。我的导航功能现在运行得很好,但存在一个问题。因为我使用的是datatemplate来显示正确的视图,所以我不知道如何从视图到viewmodel进行数据绑定。另外,是否有从一个viewmodel调用另一个viewmodel上的事件的标准方法?当我创建secound虚拟机时,我可以传递对“父”虚拟机的引用,然后以这种方式调用方法吗?