Запрос шаблона проектирования MVVM в WPF - PullRequest
1 голос
/ 08 марта 2010

Я использую архитектуру MVVM.

У меня есть пользовательский контроль UC как Вид

Модель является ModelData класс

ViewModel ( UCViewModel ) привязан к пользовательскому контролю.

У меня есть еще три пользовательских элемента управления, которые находятся внутри пользовательского элемента управления UC (обсуждалось выше).

Допустим, uc1, uc2 и uc3.

и видимость uc1, uc2 и uc3 внутри UC зависит от выбранного типа (какой бы ни был выбран переключатель).

Поскольку UC привязан к UCViewModel, и я должен сделать все, что связано с uc1, uc2 и uc3 внутри UCViewModel. Могу ли я иметь отдельную виртуальную машину для uc1, uc2 и uc3 .. если да, как я могу это сделать? Пожалуйста, помогите !!

1 Ответ

3 голосов
/ 08 марта 2010

Насколько я понимаю ваш вопрос, вы можете решить это, если UC выставить свойство SelectedSubView (или что-то еще):

public object SelectedSubView { get; }

В то же время вы привязываете радиокнопки к другим свойствам UC и соответственно обновляете SelectedSubView (не забудьте реализовать INotifyPropertyChanged). На основе выбранных свойств радиопереключателя SelectedSubView должен возвращать соответствующую ViewModel.

Затем вы привязываете ContentPresenter к свойству SelectedSubView и используете DataTemplates , чтобы выбрать правильные пользовательские элементы управления (uc1, uc2 или uc3) в зависимости от типа текущего SelectedSubView.


Поскольку вы хотите скрывать только неактивные виды, вероятно, лучше хранить их соответствующие модели представления, поэтому вы можете сделать их полями в 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
    }
}
...