Как я могу сохранить предыдущие страницы мастера? - PullRequest
2 голосов
/ 06 февраля 2012

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

1 Ответ

2 голосов
/ 06 февраля 2012

Есть много способов достичь ваших требований. Это то, что я хотел бы сделать, что, я думаю, очень соответствует шаблону проектирования MVVM.

  1. Определите класс ViewModel, который содержит все переменные, которые вы хотите собрать (независимо от разбиения на страницы.
  2. Добавьте публичное свойство с именем 'currentPage'.
  3. Определить рамку мастера. Вероятно, элемент со StackPanel. Окно будет иметь заголовок вверху и область внизу для кнопок «предыдущий» и «следующий» (и «закончить», если хотите).
  4. В основной области StackPanel поместите a и свяжите его DataContext с ViewModel
  5. В ViewModel создайте команды Next и Pref (используйте Prism DelegateCommand или реализуйте свою собственную облегченную версию, производную от ICommand. 6 / Также свяжите кнопку «Готово» с командой, используя соответствующую логику CanExecute (собрали ли вы достаточно данных?).
  6. Логика Next и Prev CanExectue будет рассматривать currentPage. например предыдущая команда CanExecute вернет false, когда currentPage = 0.
  7. У вас будет 3 разных шаблона данных, по одному на каждую страницу. Каждый шаблон данных будет представлять различные подмножества свойств, которые вы хотите собрать на этой странице. Свяжите элементы управления пользовательского интерфейса со свойствами в ViewModel и используйте режим связывания двумя способами.
  8. Получите вашу ViewModel из INotifyPropertyChanged и получите все установщики для запуска соответствующего уведомления. Требуется хотя бы для свойства currentPage, но для завершения решения сделайте это для всех свойств.
  9. В командах Next и Prev метод Execute изменит свойство currentPage (сеттер должен запустить уведомление). Вид обновится автоматически.
  10. Для основной области ItemControl реализовать WizardTemplateSelector, производный от DataTemplateSelector. Определите его как ресурс и назначьте ItemControl.ContentTemplateSelector, используя привязку {StaticResource}.
  11. Если вы хотите, вы также можете иметь элемент управления List в левой части окна, с индексом Selected Item, привязанным к текущей странице.

РЕДАКТИРОВАТЬ (Объяснитель): Основная идея состоит в том, чтобы иметь одну ViewModel, которую можно просматривать в нескольких различных шаблонах данных, в зависимости от текущей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...