Событие — это программная конструкция, которая реагирует на изменение состояния, уведомляя любые конечные точки, которые зарегистрированы для уведомления. В первую очередь, события используются для информирования пользователя о вводе через мышь и клавиатуру, но их полезность не ограничивается этим. Всякий раз, когда обнаруживается изменение состояния, возможно, когда объект был загружен или инициализирован, может быть инициировано событие, чтобы предупредить любые заинтересованные третьи стороны.
-
В приложении WPF, использующем шаблон проектирования MVVM (Model-View-ViewModel), модель представления является компонентом, отвечающим за обработку логики и состояния представления приложения.
-
Файл с выделенным кодом представления не должен содержать код для обработки событий, возникающих из какого-либо элемента пользовательского интерфейса (UI), такого как Button или ComboBox, и не должен содержать какой-либо предметной логики.
-
В идеале, программный код представления содержит только конструктор, который вызывает метод InitializeComponent, и, возможно, некоторый дополнительный код для управления или взаимодействия со слоем представления, который трудно или неэффективно выразить в XAML, например, сложные анимации.
В приложении WPF, использующем шаблон проектирования MVVM (Model-View-ViewModel), модель представления является компонентом, отвечающим за обработку логики и состояния представления приложения.
Файл с выделенным кодом представления не должен содержать код для обработки событий, возникающих из какого-либо элемента пользовательского интерфейса (UI), такого как Button или ComboBox, и не должен содержать какой-либо предметной логики.
В идеале, программный код представления содержит только конструктор, который вызывает метод InitializeComponent, и, возможно, некоторый дополнительный код для управления или взаимодействия со слоем представления, который трудно или неэффективно выразить в XAML, например, сложные анимации.
Давайте рассмотрим простой пример событий нажатия кнопки в нашем приложении. Ниже приведен код XAML файла MainWindow.xaml, в котором вы увидите две кнопки.
<Window x:Class = "MVVMHierarchiesDemo.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:MVVMHierarchiesDemo" xmlns:views = "clr-namespace:MVVMHierarchiesDemo.Views" xmlns:viewModels = "clr-namespace:MVVMHierarchiesDemo.ViewModel" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525"> <Window.DataContext> <local:MainWindowViewModel/> </Window.DataContext> <Window.Resources> <DataTemplate DataType = "{x:Type viewModels:CustomerListViewModel}"> <views:CustomerListView/> </DataTemplate> <DataTemplate DataType = "{x:Type viewModels:OrderViewModel}"> <views:OrderView/> </DataTemplate> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height = "Auto" /> <RowDefinition Height = "*" /> </Grid.RowDefinitions> <Grid x:Name = "NavBar"> <Grid.ColumnDefinitions> <ColumnDefinition Width = "*" /> <ColumnDefinition Width = "*" /> <ColumnDefinition Width = "*" /> </Grid.ColumnDefinitions> <Button Content = "Customers" Command = "{Binding NavCommand}" CommandParameter = "customers" Grid.Column = "0" /> <Button Content = "Order" Command = "{Binding NavCommand}" CommandParameter = "orders" Grid.Column = "2" /> </Grid> <Grid x:Name = "MainContent" Grid.Row = "1"> <ContentControl Content = "{Binding CurrentViewModel}" /> </Grid> </Grid> </Window>
Вы можете видеть, что свойство Click кнопки не используется в вышеупомянутом XAML-файле, но свойства Command и CommandParameter используются для загрузки различных представлений при нажатии кнопки. Теперь вам нужно определить реализацию команд в файле MainWindowViewModel.cs, но не в файле View. Ниже приводится полная реализация MainWindowViewModel.
using MVVMHierarchiesDemo.ViewModel; using MVVMHierarchiesDemo.Views; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVVMHierarchiesDemo { class MainWindowViewModel : BindableBase { public MainWindowViewModel() { NavCommand = new MyICommand<string>(OnNav); } private CustomerListViewModel custListViewModel = new CustomerListViewModel(); private OrderViewModel orderViewModelModel = new OrderViewModel(); private BindableBase _CurrentViewModel; public BindableBase CurrentViewModel { get { return _CurrentViewModel; } set { SetProperty(ref _CurrentViewModel, value); } } public MyICommand<string> NavCommand { get; private set; } private void OnNav(string destination) { switch (destination) { case "orders": CurrentViewModel = orderViewModelModel; break; case "customers": default: CurrentViewModel = custListViewModel; break; } } } }
Получите все ваши ViewModels из класса BindableBase. Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий вывод.
Как вы можете видеть, мы добавили только две кнопки и CurrentViewModel в наше главное окно. Теперь, если вы нажмете любую кнопку, он перейдет к этому конкретному представлению. Давайте нажмем кнопку «Клиенты», и вы увидите, что отображается CustomerListView.
Мы рекомендуем вам выполнить приведенный выше пример пошаговым методом для лучшего понимания.