在MVVM模式中,我有一个由3个用户控件使用的单个公共ViewModel。我正在实例化ViewModel并将其作为参数传递给用户控件的构造函数,但这会破坏XAML,这需要使用无参数构造函数构造对象。
创建共享ViewModel的最佳做法是什么?
答案 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
的基本视图