0

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

创建共享 ViewModel 的公认最佳实践是什么?

4

4 回答 4

2

您可以为 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>
于 2012-12-11T14:50:41.387 回答
1

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

但是不要忘记,MVVM 是一种模式,而不是一个死板的框架。您可以在后面的视图代码中有一个单行连接:

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

没有天塌下来。

于 2012-12-11T14:51:32.303 回答
1

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

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

public MyUserControl(MyViewModel viewModel)
{}

注意:这可能会破坏几个设计范例。:)

于 2012-12-11T14:51:37.797 回答
0

您可以拥有一个将初始化视图模型的基本视图

于 2012-12-11T14:46:59.113 回答