Caliburn поставляется с несколькими типами проводников из коробки.Один проводник без набора элементов (кроме ActiveItem) и пара проводников с коллекциями элементов и ActiveItem.
Конечно, вы также можете реализовать свой собственный проводник, но здесь это не кажется необходимым,Звучит так, будто вы просто хотите, чтобы ваш ShellViewModel
был дирижером, возможно, тот, у кого он проводит коллекцию предметов, имел бы больше смысла, поэтому вы можете получить ShellViewModel
из Conductor<IScreen>.Collection.OneActive
.
* 1007.* В вашем меню не нужно выполнять какие-либо пункты, возможно, просто нужна ссылка на коллекцию
Items
на вашем
ShellViewModel
.В своем конструкторе
ShellViewModel
вы можете создать экземпляр каждой из моделей представлений, которые появятся в меню (возможно, лучше использовать абстрактную фабрику), а затем передать ссылку Items на
MenuViewModel
.
Каждый элемент, который ведет ваш ShellViewModel
, может быть получен из Screen
, так что он имеет обычный жизненный цикл экрана (OnActivate
, OnDeactivate
и т. Д.).Ваш MenuViewModel
не выполняется и не требует жизненного цикла экрана, поэтому может быть выведен из PropertyChangedBase
.
с Caliburn.Micro, когда у вас есть ContentControl
на вашем изображении с тем женазовите это свойство в вашей модели представления, значение которой само является моделью представления, тогда Caliburn.Micro найдет это представление модели представления и вставит его в ContentControl, а также позаботится о привязках.
ShellViewModel
может иметь свойство MainMenu
типа MenuViewModel
, и ваш вид оболочки будет выглядеть примерно так:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
<ContentControl x:Name="MainMenu" Grid.Column="0" />
<ContentControl x:Name="ActiveItem" Grid.Column="1" />