基于WPF的MVVM设计模式质疑

基于WPF的MVVM设计模式质疑,wpf,mvvm,wpf-controls,Wpf,Mvvm,Wpf Controls,我使用的是MVVM架构 我有一个用户控件UC作为视图 Model是一个ModelData类 ViewModel(UCViewModel)绑定到用户控件 在usercontrolUC中还有三个usercontrols(如上所述) 比如说uc1、uc2和uc3 uc1、uc2和uc3在UC中的可见性取决于选择的类型(选择了哪个单选按钮) 由于UC绑定到UCViewModel,我必须在UCViewModel中完成所有与uc1、uc2和uc3相关的工作。我可以将虚拟机分别连接到uc1、uc2和uc3吗。

我使用的是MVVM架构

我有一个用户控件UC作为视图

Model是一个ModelData

ViewModelUCViewModel)绑定到用户控件

在usercontrolUC中还有三个usercontrols(如上所述)

比如说uc1、uc2和uc3

uc1、uc2和uc3在UC中的可见性取决于选择的类型(选择了哪个单选按钮)


由于UC绑定到UCViewModel,我必须在UCViewModel中完成所有与uc1、uc2和uc3相关的工作。我可以将虚拟机分别连接到uc1、uc2和uc3吗。。如果是,我怎么做?请帮忙

据我所知,您可以通过让
UC
公开
SelectedSubView
(或任何)属性来解决此问题:

public object SelectedSubView { get; }
同时,将单选按钮绑定到
UC
的其他属性,并相应地更新
SelectedSubView
(记住实现INotifyPropertyChanged)。根据选定的单选按钮属性,
SelectedSubView
必须返回相应的ViewModel

然后将a绑定到
SelectedSubView
属性,并使用DataTemplates根据当前
SelectedSubView
的类型选择正确的用户控件(uc1、uc2或uc3)


由于您只想隐藏非活动视图,最好保留它们各自的视图模型,因此您可能希望将它们设置为
UC
类中的字段

public class UC
{
    private MyFirstViewModel vm1;
    private MySecondViewModel vm2;
    private MyThirdViewModel vm3;
    private object selectedVM;

    public object SelectedSubView
    {
        get { return this.selectedVM; }
    }

    // This method should be called whenever one of the radio buttons
    // are updated (from their bindings)
    private void UpdateSelectedView()
    {
        this.selectedVM = // pick from vm1, vm2, vm3 according to radio button

        // Remember to raise INotifyPropertyChanged for SelectedSubView
    }
}

谢谢马克的回复。。你能告诉我如何在运行时重现viewmodel或如何设置viewmodel吗?@Ashish Ashu:更新了我的答案。