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的上下文.
我该怎么办?谢谢.
我建议使用 aContentControl来切换主视图的部分。
这可能看起来像这样(简短的形式只是为了给你一个想法;没有INotifyPropertyChanged)。
创建类型为 的空接口ISwitchableViewModel。
将属性添加到您的主 ViewModel
public property ISwitchableViewModel MyViewModel {get; set;}
Run Code Online (Sandbox Code Playgroud)
创建两个实现该接口的类ISwitchableViewModel。每个视图对应您想要显示的每个视图(View1在View2您的示例中)并将它们称为ViewModel1和ViewModel2。
当您按下 xaml 中的按钮时,将设置MyViewModel为View1或View2; 不管你的逻辑是什么。
在您的 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将自动显示该视图模型的正确视图。