Динамически связывать представления в ContainerControl с MVVM - PullRequest
4 голосов
/ 07 июля 2011

Я изучаю шаблон MVVM с помощью статьи Джоша Смита , и я хочу создать классический макет с некоторыми ссылками справа (управление с помощью команд), поэтому, когда я нажимаю один из них, я могу показать свое представлениенаправо в элемент управления с вкладками (внутри него есть ContentControl).

Это просто, когда я использую шаблон данных с определенным View и ViewModel, который я хочу показать на экране следующим образом.

<!-- this section into my MainWindow's resources file -->
<DataTemplate xmlns:vm='clr-namespace:WpfFramework.ViewModels'
              xmlns:vw='clr-namespace:WpfFramework.Views'
              DataType="{x:Type vm:MySpecificViewModel }" >        
    <vw:MySpecificView />
</DataTemplate>

Но я хочу что-то более общее.Я имею в виду, что мое mainWindow не должно знать ни конкретного View, ни конкретной ViewModel.Следует только знать, что он привязывается к некоторым командам и имеет элемент управления вкладкой, который показывает «некоторое представление».Кажется, что каждый образец, включая статью Джоша Смита , имеет ограниченную совокупность представлений и моделей представления, и это прекрасно для образца.

Итак, как я могу сказать моему ContentControl, что некоторое представление (с соответствующим viewModel) будет там, не будучи таким конкретным (без «прожига» в mainView конкретных типов)?

С наилучшими пожеланиями Родриго

PD.Я пробовал использовать базовые ViewModel и Base View, но, похоже, это не работает.

1 Ответ

3 голосов
/ 07 июля 2011

В вашем главном представлении привязайте ContentControl к универсальному ViewModelBase свойству

<ContentControl Content="{Binding CurrentPage}" />

CurrentPage будет определено в основной ViewModel как объект ViewModelBase, и для переключения страницвы просто устанавливаете CurrentPage на то, что хотите.

Поэтому, когда вы нажимаете на что-то вроде HomePageCommand, основной ViewModel будет выполнять CurrentPage = new HomePageViewModel();, при условии, что HomePageViewModel наследуется от ViewModelBase.

Некоторое время назад я написал что-то, что показывает некоторые образцы здесь , если вам интересно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...