0

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

  public MainWindow()
    {
        InitializeComponent();

        AllTopicsViewModel vm = (AllTopicsViewModel)topicsView.DataContext;
        vm.ExerciseVM = (AllExercisesViewModel)exercisesView.DataContext;

    }
4

1 回答 1

1

是的,根据 MVVM 的想法,这是一个误解。

理想情况下,您的视图代码隐藏 (view.xaml.cs) 仅包含自动生成的代码。您的视图仅通过 WPF 的数据绑定机制访问 ViewModel。因为通过 WPF 进行数据绑定是绑定视图和绑定到的 ViewModel 之间的松耦合,所以您实现了驱使人们使用 MVVM 的分离。

您正在从控件的 DataContexts 中检索 Views 代码隐藏中的 ViewModel。这样,您就可以在 View 和 ViewModel 之间创建一个强引用。因此,为了帮助您解决问题:您应该考虑在 View 的代码隐藏中尝试使用 ViewModel 做什么,以及如何在视图的 XAML 或 ViewModel 的代码本身中以不同的方式进行操作。

如果您愿意,请发布完整的MainWindow()课程以获取一些建议...

编辑:

好的,所以它只是在父 ViewModel 上设置子 ViewModel。父 ViewModelAllTopicsViewModel应该负责ExerciseVM在初始化时设置自己的。这不是 View 的工作。父视图模型应该从一个或多个模型中组装数据,然后创建视图使用的子视图模型。这对你有意义吗?

于 2013-05-15T06:43:29.797 回答