多个视图使用的ViewModel

时间:2012-12-11 14:45:07

标签: c# wpf

在MVVM模式中,我有一个由3个用户控件使用的单个公共ViewModel。我正在实例化ViewModel并将其作为参数传递给用户控件的构造函数,但这会破坏XAML,这需要使用无参数构造函数构造对象。

创建共享ViewModel的最佳做法是什么?

4 个答案:

答案 0 :(得分:2)

您可以为MainWindow创建一个ViewModel,其中包含SharedViewModel类型的属性:public SharedViewModel SharedViewModel {get;set;}。您将Window的DataContext设置为MainViewModel并绑定到共享的ViewModel,如:

<Window>
    <Grid>
        <UserControl1 DataContext="{Binding Path=SharedViewModel}"/>
        <UserControl2 DataContext="{Binding Path=SharedViewModel}"/>
        <UserControl3 DataContext="{Binding Path=SharedViewModel}"/>
    </Grid>
</Window>

答案 1 :(得分:1)

Unity的依赖注入(http://msdn.microsoft.com/en-us/library/ff660899(v=pandp.20).aspx)或MEF是将视图耦合到视图模型的标准MVVM方法

但是不要忘记MVVM是一种模式,而不是一种僵化的框架。您可以在视图的代码中使用单行连接:

InitializeComponent();
this.DataContext = new ViewModel(whatever);

没有天空掉下来。

答案 2 :(得分:1)

您可以为UserControls添加无参数构造函数

public MyUserControl() : base(new MyViewModel())
{}

public MyUserControl(MyViewModel viewModel)
{}

注意:这可能会打破几种设计范例。 :)

答案 3 :(得分:0)

您可以拥有一个初始化viewmodel

的基本视图