MVVM:将代码隐藏转换为XAML

时间:2013-05-15 05:21:57

标签: c# asp.net xaml mvvm

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

  public MainWindow()
    {
        InitializeComponent();

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

    }

1 个答案:

答案 0 :(得分:1)

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

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

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

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

编辑:

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