在 MVVM 模式中,我有一个由 3 个用户控件使用的通用 ViewModel。我正在实例化 ViewModel 并将其作为参数传递给用户控件的构造函数,但这破坏了 XAML,它要求使用无参数构造函数构造对象。
创建共享 ViewModel 的公认最佳实践是什么?
您可以为 MainWindow 创建一个 ViewModel,其中包含 Type 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>
使用 Unity 进行依赖注入 ( http://msdn.microsoft.com/en-us/library/ff660899(v=pandp.20).aspx ) 或 MEF 是将视图耦合到视图模型的标准 MVVM 方式
但是不要忘记,MVVM 是一种模式,而不是一个死板的框架。您可以在后面的视图代码中有一个单行连接:
InitializeComponent();
this.DataContext = new ViewModel(whatever);
没有天塌下来。
您可以为您的 UserControls 添加无参数构造函数
public MyUserControl() : base(new MyViewModel())
{}
public MyUserControl(MyViewModel viewModel)
{}
注意:这可能会破坏几个设计范例。:)
您可以拥有一个将初始化视图模型的基本视图