繁体   English   中英

MVVM:将后台代码转换为XAML

[英]MVVM: Convert code-behind to XAML

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

  public MainWindow()
    {
        InitializeComponent();

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

    }

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

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

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

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

编辑:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM