Простая навигация в WPF используя MVVM

C#

В прошлой статье мы сделали иерархический элемент TreeView наполненный разными объектами. В этой статье мы увидим, как перемещаться по различным пользовательским элементам управления, отображая их данные в ContentControl.

У нас есть стандартное приложение с иерархическим списком объектов. В нашем случае это Города, Улицы и дома. При выборе города должны отобразится свойства этого города. Если же мы перейдем на другой объект, будь то другой город, улица или дом,  то содержимое должно замениться на соответствующие текущему объекту.

Макет главного окна имеет TreeView с левой стороны дескриптора и ContentControl с правой стороны для отображения соответствующего объекта.Простая навигация в  WPF используя MVVM

 

Шаг 1 Создание ExtendedTreeView. Модификация стандартного TreeView, для получения выделенного объекта.

  1. Создадим новый класс и назовем его ExtendedTreeView, который будет наследоваться от TreeView.
  2. Содержимое класса
  3. В файл MainWindowViewModel.cs добавим новое свойство — Item (object). В это свойство будет передаваться выбранный объект.

     
  4. Заменим стандартный элемент TreeView в MainWindowView.xaml. И забиндим поле Item в наш добавленный параметр SelectedItem_

     

Шаг 2 Создадим ViewModel для объектов:

  1. Создадим в проекте папку ViewModels.
  2. Добавим в папку новый класс CityViewModel
    1. Укажем поле SelectedCity — Выбранный город
    2. Конструктор принимает объект типа City и сохраняет его в поле SelectedCity
    3. Код класса
  3. Добавим новый класс StreetViewModel
    1. Укажем поле StreetName — Наименование улицы
    2. Конструктор принимает объект типа Street и сохраняет его в поле StreetName
    3. Код класса

       
  4. Добавим новый класс HouseViewModel
    1. Укажем поле HouseName — Номер дома
    2. Конструктор принимает объект типа House и сохраняет его в поле StreetName
    3. Код класса

       

Шаг 3 добавим UserControls для наших объектов:

  1. Создадим папку Views
  2. Добавим новый  пользовательский  элемент  управления в папку  Views.  CityView.xamlПростая навигация в  WPF используя MVVM
  3. Так же нужно создать пользовательские элементы для других объектов. Вот код для StreetView.xaml

     
  4. Код для HouseView.xaml

     

Шаг 4 Создание DataTemplate в файле MainWindow.xaml

  1. ‎Создайте DataTemplate типа CityViewModel, который должен содержать в себе элемент управления CityView.

     
  2. Аналогично нужно добавить DataTemplate для типа StreetViewModel, которой содержит в себе элемент управления StreetView

     
  3. И  для типа HouseViewModel, с элементом управления HouseView

     

Шаг 5 Отредактируем файл MainWindow.Xaml

  1. ‎Подключите ссылки на папки viewmodel и view.
  2. Добавьте вышеуказанные Шаблоны данных(DataTemplate) в качестве ресурсов MainWindow.

     
  3. Добавьте ContentControl, который будет действовать как контейнер, и после завершения навигации соответствующий UserControl будет помещен в этот ContentControl.‎

     
  4. Код класса

     

Шаг 6 Добавление функционала в MainWindowViewModel.cs

  1. Добавим поле SelectedViewModel для отображения
  2. Создадим метод для навигации по моделям.

     
  3. При изменении поля Item, т.е при выборе элемента из TreeView, будет вызываться метод, который загрузит в ContentControl соответствующий элемент управления

     
  4. Код класса MainWindowViewModel.cs

    При нажатии кнопки employee свойству SelectedViewModel присваивается EmployeeViewModel, и, следовательно, в ContentControl содержимому будет присвоен DataTemplate объекта DataType EmployeeViewModel, а EmployeeView будет загружен в ContentControl.‎

    ‎Ну вот. Мы выполнили простую навигацию в приложении WPF с помощью MVVM.‎

Проект можно скачать тут

Источник
Добавить комментарий