我正在使用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 ..如果是,我该怎么做?请帮助!!
答案 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
}
}