Есть несколько способов сделать это, в зависимости от того, имеет ли каждый тип продукта уникальную навигацию или есть ли общие черты между каждым продуктом.
Например, у вас может быть тип Product
, который реализует интерфейс IProduct
(помеченный атрибутом InheritedExport
).Каждый из этих типов Продуктов также может быть производным от типа Conductor
и может содержать список экранов (элементов), которые они должны отображать.
ShellViewModel
(может быть типа Conductor<IScreen>.Collection.OneActive
) может поддерживать коллекцию IProduct
, импортированных MEF.По завершении импорта эту коллекцию можно использовать для заполнения коллекции ShellViewModel
Items
, которая привязана к списку товаров для выбора пользователя.
Когда пользователь делает выбориз ListBox ShellViewModel
может вызвать ActivateItem
для выбранного продукта.
Фактически, если вы дадите своему ListBox имя Items
, Caliburn автоматически установит ActiveItem
при выборе элемента в списке, и, следовательно, будет установлен активный элемент.на соответствующий экран продукта.
Ваш ShellView.xaml будет содержать ContentControl
с именем ActiveItem
для отображения текущего выбранного продукта (проводника).