Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 570 571 572 573 574 575 576 577 578 ... 642
Перейти на страницу:

    new Car { Id = 1, Color = &quot;Blue&quot;, Make = &quot;Chevy&quot;,

              PetName = &quot;Kit&quot;, IsChanged = false });

  Cars.Add(

    new Car { Id = 2, Color = &quot;Red&quot;, Make = &quot;Ford&quot;,

              PetName = &quot;Red Rider&quot;, IsChanged = false });

}

Далее переместите весь код, относящийся к командам, из файла отделенного кода окна в модель представления, заменив ссылку на переменную _cars ссылкой на Cars. Вот измененный код:

// Для краткости остальной код не показан

private void DeleteCar(Car car)

{

  Cars.Remove(car);

}

Обновление кода и разметки MainWindow

Из файла MainWindow.xaml.cs кода была удалена большая часть кода. Удалите строку, которая устанавливает ItemsSource для поля со списком, оставив только вызов InitializeComponent(). Код должен выглядеть примерно так:

public MainWindow()

{

    InitializeComponent();

}

Добавьте в начало файла следующий оператор using:

using WpfViewModel.ViewModels;

Создайте строго типизированное свойство для хранения экземпляра модели представления:

public MainWindowViewModel ViewModel { get; set; }

  = new MainWindowViewModel();

Добавьте свойство DataContext к объявлению окна в разметке XAML:

DataContext=&quot;{Binding ViewModel, RelativeSource={RelativeSource Self}}&quot;

Обновление разметки элементов управления

Теперь, когда свойство DataContext для Window установлено в модель представления, потребуется обновить привязки элементов управления в разметке XAML. Начиная с поля со списком, модифицируйте разметку за счет добавления свойства ItemsSource:

&lt;ComboBox Name=&quot;cboCars&quot; Grid.Column=&quot;1&quot; DisplayMemberPath=&quot;PetName&quot; 

ItemsSource=&quot;{Binding Cars}&quot; /&gt;

Прием работает, т.к. контекстом данных для Window является MainWindowViewModel, a Cars — открытое свойство модели представления. Вспомните, что конструкции привязки обходят дерево элементов до тех пор, пока не найдут контекст данных. Далее понадобится обновить привязки для элементов управления Button. Задача проста; поскольку привязки уже установлены на уровне окна, нужно лишь модифицировать конструкции привязки, чтобы они начинались со свойства DataContext:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

&lt;Button x:Name=&quot;btnAddCar&quot; Content=&quot;Add Car&quot;

  Margin=&quot;5,0,5,0&quot; Padding=&quot;4, 2&quot;

  Command=&quot;{Binding Path=<b>DataContext.AddCarCmd</b>,

  RelativeSource={RelativeSource Mode=FindAncestor,

                  AncestorType={x:Type Window}}}&quot;

  CommandParameter=&quot;{Binding ElementName=cboCars, Path=ItemsSource}&quot;/&gt;

&lt;Button x:Name=&quot;btnDeleteCar&quot; Content=&quot;Delete Car&quot;

  Margin=&quot;5,0,5,0&quot; Padding=&quot;4, 2&quot;

  Command=&quot;{Binding Path=<b>DataContext.DeleteCarCmd</b>,

  RelativeSource={RelativeSource Mode=FindAncestor,

  AncestorType={x:Type Window}}}&quot;

  CommandParameter=&quot;{Binding ElementName=cboCars, Path=SelectedItem}&quot; /&gt;

&lt;Button x:Name=&quot;btnChangeColor&quot; Content=&quot;Change Color&quot;

  Margin=&quot;5,0,5,0&quot; Padding=&quot;4, 2&quot;

  Command=&quot;{Binding Path=<b>DataContext.ChangeColorCmd</b>,

  RelativeSource={RelativeSource Mode=FindAncestor,

  AncestorType={x:Type Window}}}&quot;

  CommandParameter=&quot;{Binding ElementName=cboCars, Path=SelectedItem}&quot;/&gt;

Итоговые сведения о моделях представлений

Верите или нет, но вы только что закончили построение первого WPF-приложения MWM. Вы можете подумать: "Это не реалистичное приложение. Как насчет данных? Данные в примере жестко закодированы". И вы будете совершенно правы. Это не реальное приложение, а лишь демонстрация. Однако в ней легко оценить всю прелесть паттерна MWM. Представлению ничего не известно о том, откуда поступают данные; оно просто привязывается к свойству модели представления. Реализации модели представления можно менять, скажем, использовать версию с жестко закодированными данными во время тестирования и версию, обращающуюся к базе данных, в производственной среде.

Можно было бы обсудить еще немало вопросов, в том числе разнообразные инфраструктуры с открытым кодом, паттерн "Локатор модели представления" (View Model Locator) и множество разных мнений на предмет того, как лучше реализовывать паттерн MWM. В том и заключается достоинство паттернов проектирования программного обеспечения — обычно существует много правильных способов их реализации, и вам необходимо лишь отыскать стиль, который наилучшим образом подходит к имеющимся требованиям.

Обновление проекта AutoLot.Dal для MWM

Если вы хотите обновить проект AutoLot.Dal для MWM, то должны применить изменения, которые вносились в Car, ко всем сущностям в проекте AutoLot.Dal.Models, включая BaseEntity.

1 ... 570 571 572 573 574 575 576 577 578 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга