MVVM:将代码隐藏转换为XAML

本文关键字:转换 XAML 隐藏 代码 MVVM | 更新日期: 2023-09-27 18:13:41

我有一个AllTopicsViewModel,它有一个属性ExerciseVM,这是一个AllExerciseViewModel,因为我希望能够刷新一个ExerciseView的AllExerciseViewModel,所以我这样做(甚至不确定它是否违反了MVVM,请告诉我)。好吧,我想转换下面的2行InitializeComponent到XAML,但不知道如何,有人能帮助我吗?

  public MainWindow()
    {
        InitializeComponent();
        AllTopicsViewModel vm = (AllTopicsViewModel)topicsView.DataContext;
        vm.ExerciseVM = (AllExercisesViewModel)exercisesView.DataContext;
    }

MVVM:将代码隐藏转换为XAML

是的,根据MVVM的思想,这是一种误解。

理想情况下,视图的代码隐藏(View . example .cs)只包含自动生成的代码。视图只能通过WPF的数据绑定机制访问ViewModel。由于通过WPF进行的数据绑定是绑定视图和绑定到ViewModel之间的松耦合,因此您实现了促使人们使用MVVM的分离。

您正在从控件的DataContexts中检索视图代码中的ViewModel。这样,您就可以在View和ViewModel之间创建一个强引用。所以,帮助你与你的问题:你应该考虑你试图做什么与你的ViewModel在视图的代码背后,以及你如何能做到不同,无论是在视图的XAML或在ViewModel的代码本身。

如果你喜欢,把完整的MainWindow()课程贴出来,以获得一些建议…

编辑:

它只是在父ViewModel上设置子ViewModel。父视图模型AllTopicsViewModel应该负责在初始化时设置自己的ExerciseVM。这不是View的工作。父视图模型应该组装来自一个或多个模型的数据,然后创建视图所使用的子视图模型。你明白了吗?