2010-03-08 98 views
1

我正在使用MVVM架构。查询WPF上的MVVM设计模式

我有一个用户控件UC查看

型号ModelData

视图模型UCViewModel)被绑定到一个用户控件。

我有三个更多的usercontrols在usercontrol UC(上面讨论)。

假设uc1,uc2和uc3。

并且在UC中的uc1,uc2和uc3的可见性取决于所选的类型(哪个单选按钮被选中)。

由于UC绑定到UCViewModel,我必须在UCViewModel内部完成与uc1,uc2和uc3相关的所有工作。我可以有单独的虚拟机uc1,uc2和uc3 ..如果是的我该怎么做?请帮忙!!

回答

3

据我理解你的问题,你可以通过让UC暴露SelectedSubView(或其他)财产解决这个问题:

public object SelectedSubView { get; } 

同时,您绑定的单选按钮来的UC其他属性和相应地更新SelectedSubView(记得实施INotifyPropertyChanged)。根据选定的单选按钮属性,SelectedSubView必须返回相应的ViewModel。

您然后绑定ContentPresenterSelectedSubView属性,并使用的DataTemplates选择基于当前SelectedSubView的类型正确的用户控件(UC1,UC2或UC3)。


既然你只想隐藏不活动的意见,它可能是最好保持在他们各自的ViewModels,所以你可能想使他们在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 
    } 
} 
+0

感谢马克的答复领域。 。你能否给我一个回想一下viewmodel或者如何在运行时设置viewmodel的想法? – 2010-03-08 09:51:53

+0

@Ashish Ashu:更新了我的答案。 – 2010-03-08 10:33:09