Элемент пользовательского интерфейса, управляемый комбинированным полем с Caliburn.Micro - PullRequest
2 голосов
/ 29 марта 2011

Я пытаюсь разобраться в Caliburn.Micro и MVVM в небольшом тестовом приложении WPF.

У меня есть пользовательский элемент управления, в котором есть поле со списком платежей (с Наличными, Чеком, Кредитом), и рядом с этим полем со списком я хочу загрузить соответствующее представление ввода данных на основе выбранного типа оплаты.Например, если пользователь выбирает наличные, возможно, я загружаю вид только с текстовым полем суммы, но если пользователь выбирает кредит, я загружаю вид с полями для суммы, типа кредитной карты, номера кредитной карты и т. Д.

Может ли Caliburn.Micro помочь с этим каким-либо образом?Я продолжаю задаваться вопросом, является ли это случаем использования для функциональных возможностей экранов и проводников, встроенных в Caliburn.Micro, но я не уверен.Если Caliburn может помочь, какой должна быть иерархия модели представления, чтобы это поддерживать?Я мог видеть наличие PaymentViewModel, который содержит экземпляр PaymentTypeViewModel, но я не уверен, как бы я упростил переключение экземпляра PaymentTypeViewModel, который каким-то образом основывался бы на текущем выборе в поле со списком, а также загрузил бы связанное представлениедля этой модели просмотра.

Любой данный совет очень ценится.

1 Ответ

3 голосов
/ 30 марта 2011

Есть несколько способов сделать это, но использование типов Caliburn Conductor и Screen наиболее целесообразно. Я предполагаю, что один вопрос будет в том, что вы собираетесь делать с этими данными, когда получите их от пользователя? Будет ли он сохранен или временно сохранен как состояние приложения, пока вы будете получать дополнительную информацию от пользователя на разных экранах?

В любом случае, имеет смысл использовать один экранный проводник (Conductor<T>), который будет содержать ссылки на каждый из трех типов экранов поиска платежей. Создайте модель представления и представление для каждого из экранов платежей, создайте экземпляр и сохраните ссылку на каждый из них в вашем Conductor (или, что еще лучше, вставьте их как зависимости в конструктор вашего проводника, или введите тип фабрики, который их создает).

Согласно соглашениям, ваш комбинированный список, если он вызывается Payment, автоматически свяжет выбранное значение со свойством SelectedPayment вашего проводника. В установщике этого свойства вы можете вызвать метод ActivateItem для соответствующей ссылки на модель платежного представления на основе значения SelectedPayment.

Предположительно, у вас на проводнике будет кнопка «ОК» или аналогичная, которая может извлекать данные из текущей активной модели (ActiveItem). Каждая модель представления платежей может реализовывать интерфейс, например, с помощью метода GetPaymentDetails, и, возможно, это может вернуть сериализованную форму данных, готовых для сохранения.

Следует также упомянуть в своем представлении проводников (предположим, что оно называется ShellView.xaml), вы можете использовать ContentControl для отображения текущей модели представления платежей (и чтобы Caliburn вставлял соответствующий вид и выполнял привязку), на который ссылается как ActiveItem:

<ContentControl x:Name="ActiveItem" />

Обратите внимание, что вы можете быть немного более любопытным и дать вашему комбинированному списку (немного двусмысленное) имя Items и связать его ItemsSource с коллекцией моделей просмотра платежей, которая может быть коллекцией Items на Conductor<T>.Collection.OneActive. Caliburn автоматически свяжет выбранное значение (модель представления платежа) со свойством ActiveItem на вашем проводнике, и поэтому ваше текущее представление будет автоматически переключаться при изменении значений в выпадающем списке.

...