我正在尝试使用 MVVM 模式在 View 之间设置导航。我的应用程序包含一个 MainWindow 和两个 View ,每个 View 都有一个按钮。当我单击 View1 中的按钮时,我想在 MainWindow 上设置 View2。
我发现有几个教程解释了如何使用主窗口上的按钮(模拟 tabControl)从一个 View 导航到另一个 View ,它有效,但不是我想要的。
我正在寻找类似的东西:
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();
}
}
主窗口.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new View1_View();
}
public void SwitchToView2()
{
this.DataContext = new View2_View();
}
}
我的问题是,如果我这样做,我无法从 View1_View 类访问 SwitchToView2() 方法,如果它不是static ,如果它是静态的,我将失去 MainWindow 的上下文。
我应该如何进行? 谢谢。
最佳答案
我建议使用 ContentControl
来切换主视图的一部分。
这可能看起来像这样(简短形式只是为了给您一个想法;没有 INotifyPropertyChanged
)。
创建一个ISwitchableViewModel
类型的空接口(interface)。
将属性添加到您的主 ViewModel
public property ISwitchableViewModel MyViewModel {get; set;}
创建两个实现接口(interface) ISwitchableViewModel
的类。每个您想要显示的 View (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>
当您在 MainViewModel
中设置 MyViewModel
时,UI 将自动显示该 View 模型的正确 View 。
关于c# - WPF View 谁导致另一个使用 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716572/