2013-05-15 110 views
0

我有一个AllTopicsViewModel,它有一个属性ExerciseVM,它是一个AllExerciseViewModel,因为我希望能够刷新一个ExerciseView的AllExerciseViewModel,所以我这样做(不是即使确定它是否违反了MVVM,请告诉我)。那么,我想将InitializeComponent后面的2行转换为XAML,但不知道如何,任何人都可以帮助我?MVVM:将代码隐藏转换为XAML

public MainWindow() 
    { 
     InitializeComponent(); 

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

    } 
+0

什么是大图? vm是局部变量。你打算怎么处理它? – Marius

+0

它与以下线程相关:http://stackoverflow.com/questions/16536205/mvvm-populate-a-view-with-listbox-when-an-item-from-another-view-with-listbo The AllTopicsViewModel是topicsView的ModelView,我只是引用它并尝试使用exerciseView –

回答

1

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

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

您正在从控件的DataContext中检索视图代码隐藏中的ViewModel。有了这个,您可以在View和ViewModel之间创建一个强大的参考。所以,为了帮助你解决你的问题:你应该考虑你在View的代码隐藏中想要用ViewModel做什么,以及如何在视图的XAML或ViewModel的代码本身中以不同的方式做它。

如果你喜欢,发布完整MainWindow()类一些建议......

编辑:

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

+0

的ViewModel(AllExercisesViewModel)来设置它的ExerciseVM属性,那基本上只是我的MainWindow类的内容,所以我试图删除它并执行在XAML中绑定,但我不知道如何。 –

+0

@RodelioMartinezRodriguez:看我的编辑... – Marc

+0

好吧,我想我已经有了这个想法,但是如何将ExerciseView绑定到使用XAML的MainWindow中的AllTopicsViewModel的ExerciseVM属性? –