WPF查看谁使用MVVM导致另一个人

C. *_*hen 5 c# wpf binding mvvm

我试图使用MVVM模式在视图之间建立导航.我的应用程序包含一个MainWindow和两个视图,每个视图都有一个按钮.当我单击View1中的按钮时,我想在MainWindow上设置View2.

我找到了几个教程,解释了如何通过主窗口上的按钮(模拟tabControl)从一个视图导航到另一个视图,它可以工作,但它不是我想要的.

我正在寻找类似的东西:

View1_View.xaml.cs:

public partial class View1_View : UserControl
{
    private View1_ViewModel _viewModel = new View1_ViewModel();

    public View1_View()
    {
        InitializeComponent();
    }

    private void Btn_SwitchToView2_Click(object sender, RoutedEventArgs e)
    {
        MainWindow.SwitchToView2();
    }
}
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new View1_View();
    }

    public void SwitchToView2()
    {
        this.DataContext = new View2_View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如果我这样做,从类View1_View我不能访问方法SwitchToView2()如果它不是静态的,如果它是静态的我丢失了MainWindow的上下文.

我该怎么办?谢谢.

Mig*_*oom 3

我建议使用 aContentControl来切换主视图的部分。

这可能看起来像这样(简短的形式只是为了给你一个想法;没有INotifyPropertyChanged)。

创建类型为 的空接口ISwitchableViewModel

将属性添加到您的主 ViewModel

public property ISwitchableViewModel MyViewModel {get; set;}
Run Code Online (Sandbox Code Playgroud)

创建两个实现该接口的类ISwitchableViewModel。每个视图对应您想要显示的每个视图(View1View2您的示例中)并将它们称为ViewModel1ViewModel2

当您按下 xaml 中的按钮时,将设置MyViewModelView1View2; 不管你的逻辑是什么。

在您的 xaml 中,将其添加到您想要显示可切换内容的位置。

<ContentControl Content="{Binding MyViewModel}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type viewModel:ViewModel1}">
            <view:View1 />
        </DataTemplate>
        <DataTemplate DataType="{x:Type viewModel:ViewModel2}">
            <view:View2 />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

MyViewModel当您在 UI中设置时,MainViewModel将自动显示该视图模型的正确视图。