查询WPF上的MVVM设计模式

时间:2010-03-08 08:42:41

标签: wpf mvvm wpf-controls

我正在使用MVVM架构。

我有一个用户控件 UC 作为查看

模型 ModelData

ViewModel UCViewModel )绑定到用户控件。

我还有三个usercontrols位于usercontrol UC 中(如上所述)。

让我们说uc1,uc2和uc3。

并且 UC 内的uc1,uc2和uc3的可见性取决于所选的类型(选择了单选按钮)。

由于UC绑定到UCViewModel,我必须在UCViewModel中执行与uc1,uc2和uc3相关的所有操作。我可以将VM分离到uc1,uc2和uc3 ..如果是,我该怎么做?请帮助!!

1 个答案:

答案 0 :(得分:3)

据我了解您的问题,您可以通过UC公开SelectedSubView(或其他)属性来解决此问题:

public object SelectedSubView { get; }

同时,将radiobuttons绑定到UC的其他属性并相应地更新SelectedSubView(记得实现INotifyPropertyChanged)。根据所选的单选按钮属性,SelectedSubView必须返回相应的ViewModel。

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


由于您只想隐藏非活动视图,因此最好保留各自的ViewModel,因此您可能希望在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
    }
}