2014-12-23 1 views
0

В настоящее время у меня есть Ribboncontrol поверх моего главного окна. На Ribboncontrol есть несколько RibbonPages, и в зависимости от того, какой RibbonPage выбран, я хочу отобразить ниже RibbonControl другой макет IDE, который соответствует потребностям выбранного RibbonPage.динамическое дно Dockpanel как функция выбранной ленты с использованием MVVM

Является ли мой подход правильным, что я создаю разные виды/режимы просмотра для каждого макета IDE и что с каждой другой RibbonPage, которая выбрана, просматривается соответствующая view/viewmodel? Мне нравится использовать этот подход, потому что тогда мне не нужно было бы связываться между представлениями/режимами просмотра, потому что функциональность в каждой RibbonPage является автономной.

Каждый вид был бы UserControl, который инкапсулирует DockLayoutManager. Я включил некоторые скриншоты ниже (SS1 = MainWindow, на которые я хочу загрузить разные виды, SS2 = представление, представляющее UserControl, которое в свою очередь представляет DockLayoutManager со всеми связанными LayoutPanels, DocumentPanels, ....)

Вопрос: Как я могу это реализовать и является ли это работоспособным решением для отображения разных представлений в зависимости от выбранного RibbonPage?

enter image description here

enter image description here

ответ

1

Обычно для отображения различных страниц просмотра, которые относятся к различным функциям и или язычки в RibbonControl. Как правило, у вас будет класс модели базового представления, который распространяется на все ваши модели просмотра, и свойство этого типа в вашей модели представления родителя ... назовем его YourViewModelProperty. Чтобы изменить вид, вы бы просто нужно установить новую модель представления для этого свойства:

YourViewModelProperty = new SomeDerivedViewModel() 

Вы можете связать каждый UserControl своей соответствующей модели представления в DataTemplate с объявленным в App.xaml. Таким образом, все они будут доступны для каждого вида приложения. Вы можете узнать дополнительную информацию об этом методе в своем ответе на вопрос WPF - automatic view resolving for view model здесь, в разделе «Переполнение стека».


UPDATE >>>

Существует гораздо лучшее объяснение доступно в моем ответе на вопрос WPF MVVM navigate views.

+0

моя проблема в том, что, хотя у меня есть событие «SelectedPageChanged», мне нравится реализовывать обработку событий (загрузку и отображение другого представления) исключительно в xaml. Как я могу это сделать? –

+0

Вышеупомянутый и связанный ответ показывает вам, как это сделать. Как только вы настроите 'DataTemplate' для своих моделей просмотра, вам нужно всего лишь установить 'YourViewModelProperty' новую модель представления, как я показал вам выше. Вот и все. – Sheridan

+0

ok Я признаю, что мне нужно немного вникать в это, поскольку я очень новичок в WPF. Спасибо, ваше прочтение комментариев, надеюсь, заставит меня начать. –