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的思想,这是一种误解。
理想情况下,视图的代码隐藏(View . example .cs)只包含自动生成的代码。视图只能通过WPF的数据绑定机制访问ViewModel。由于通过WPF进行的数据绑定是绑定视图和绑定到ViewModel之间的松耦合,因此您实现了促使人们使用MVVM的分离。
您正在从控件的DataContexts中检索视图代码中的ViewModel。这样,您就可以在View和ViewModel之间创建一个强引用。所以,帮助你与你的问题:你应该考虑你试图做什么与你的ViewModel在视图的代码背后,以及你如何能做到不同,无论是在视图的XAML或在ViewModel的代码本身。
如果你喜欢,把完整的MainWindow()
课程贴出来,以获得一些建议…
它只是在父ViewModel上设置子ViewModel。父视图模型AllTopicsViewModel
应该负责在初始化时设置自己的ExerciseVM
。这不是View的工作。父视图模型应该组装来自一个或多个模型的数据,然后创建视图所使用的子视图模型。你明白了吗?