MVVM & Caliburn: замена всех экранов? - PullRequest
1 голос
/ 04 апреля 2011

Я новичок в MVVM и решил использовать Caliburn и MEF в моем текущем проекте. Проект в основном представляет собой основу для размещения экранов и рабочего процесса на основе выбранного продукта. Когда пользователь выбирает продукт, мне нужно поменять все текущие экраны на те, которые имеют отношение к выбранному продукту. Очевидно, что это должно быть сделано модульным способом, чтобы продукты и связанные с ними экраны можно было подключать или удалять по мере необходимости.

Не думаю, что это выходит за рамки Caliburn, но я не уверен, как к этому подойти. Кто-нибудь может предложить некоторое понимание того, как это может быть достигнуто?

Заранее спасибо.

1 Ответ

1 голос
/ 05 апреля 2011

Есть несколько способов сделать это, в зависимости от того, имеет ли каждый тип продукта уникальную навигацию или есть ли общие черты между каждым продуктом.

Например, у вас может быть тип Product, который реализует интерфейс IProduct (помеченный атрибутом InheritedExport).Каждый из этих типов Продуктов также может быть производным от типа Conductor и может содержать список экранов (элементов), которые они должны отображать.

ShellViewModel (может быть типа Conductor<IScreen>.Collection.OneActive) может поддерживать коллекцию IProduct, импортированных MEF.По завершении импорта эту коллекцию можно использовать для заполнения коллекции ShellViewModel Items, которая привязана к списку товаров для выбора пользователя.

Когда пользователь делает выбориз ListBox ShellViewModel может вызвать ActivateItem для выбранного продукта.

Фактически, если вы дадите своему ListBox имя Items, Caliburn автоматически установит ActiveItem при выборе элемента в списке, и, следовательно, будет установлен активный элемент.на соответствующий экран продукта.

Ваш ShellView.xaml будет содержать ContentControl с именем ActiveItem для отображения текущего выбранного продукта (проводника).

...