2013-07-03 3 views
0

Мне было интересно, какой самый обычный способ навигации между двумя несвязанными моделями просмотра с использованием Caliburn.Micro? Предположим, что в одной части приложения есть дерево представлений: ParentViewModel-> ChildVM1-> ChildVM2 и т. Д. Кроме того, OmniVM должен быть в состоянии перейти к любой из вышеупомянутых моделей представлений. Под «навигацией» я подразумеваю поиск соответствующего экземпляра (после этого часть активации является простой). Я не хочу использовать какое-либо использование IEventAggregator или Container.Resolve. Спасибо за ответНавигация с использованием Caliburn.Micro

+1

Не могли бы вы расширить то, что вы пытаетесь достичь? Вы имеете в виду ShellViewModel, которому необходимо провести множество экранов? – devdigital

ответ

1

devdigital сказало это в комментариях и я буду говорить об этом здесь, и как Робах (архитектор, который написал рамку) бы сказать, вопросы архитектуры в интерфейсе тоже. Это означает, что вам следует подумать о том, как организован ваш уровень представления. Другими словами, у вас будет интерфейс с вкладками, в котором основным окном будет проводник Caliburn.Micro и экраны с вкладками, или у вас будет интерфейс пользователя Visual Studio, который использует стыковочные окна и панели инструментов, рассмотрите этот тип мышления при построении пользовательского интерфейса. Теперь, если вам не нравится архитектура, и вы просто хотите создать свой графический интерфейс, я могу сказать вам, что Screen and Conductor являются наиболее важными классами для навигации. I Проконсультируйте, чтобы прочитать статью Screens, Conductors and Compositions, если вы еще этого не сделали, это даст вам представление о том, о чем я говорю, и о кучей полезных мыслей.

Edit: Для вашей конкретной ситуации и так как у вас есть эта глубоко вложенную структуру я бы создать интерфейс для навигации по MenuViewModel, что-то вроде этого:

public interface IMenuNavigator { 
    void NavigateToItem(Item i); 
} 

Тогда я бы впрыскивать это в те внутренний взглянуть на модели, я думаю, у вас есть чувство того, что я имею в виду. С другой стороны, вы также можете использовать IEventAggregator, который используется для слабосвязанной связи между несвязанными компонентами (viewmodels), например, в вашей ситуации, поэтому вы публикуете сообщения в агрегаторе для навигации, а MenuViewModel слушает их и обрабатывает их правильно. Вы можете даже прийти с лучшей идеей в зависимости от вашей конкретной внутренней ситуации. Надеюсь, это поможет.

+0

Я уже прочитал это, и я хорошо знаком с тем, как C. Micro обрабатывает слой презентации. Однако я не нашел одного четко определенного способа, который позволяет перемещаться между различными частями дерева представлений. Например, у меня есть ShellViewModel, который является просто проводником с двумя детьми: MainViewModel и LoginViewModel. Теперь MainViewModel является самим проводником и содержит, скажем, MenuViewModel и ContentViewModel. MenuViewModel имеет список опций и сам проводник, в то время как ContentViewModel имеет различный контент, который может быть очень сложным. –

+0

Я хочу иметь возможность получить из любой модели внутреннего вида все, что находится внутри ContentViewModel, к определенному элементу MenuViewModel. Как вы достигаете такой возможности? Надеюсь, я достаточно хорошо разъяснил свой вопрос)) –

+0

@GenaVerdel, я отредактировал ответ, проверьте редактирование, пожалуйста. –

Смежные вопросы