Table of contents
Open Table of contents
Въведение
Цел на упражнението
Запознаване с Data Binding при промяна на данни, използване на INotifyPropertyChanged, ObservableCollection и ICommand.
Задачите в упражнението изграждат:
- Четири отделни примерни проекта
В това упражнение:
- Работа с ObservableCollection и ICommand
- Имплементация на ViewModel в отделен клас
- Прилагане на MVVM архитектурен шаблон
Очакван резултат
Ще създадем WPF приложение, което следи разходи, обработва команди и организира кода чрез MVVM.
Задачи за домашна работа
- Променете проекта UI, така че да следва MVVM.
- Създайте нов ViewModel, който преобразува въведен текст в малки букви.
- Добавете възможност за превключване на ViewModel, за да управлявате различни режими на работа.
Важни концепции
- INotifyPropertyChanged – уведомяване за промени в данни
- ObservableCollection – динамичен списък, който автоматично обновява UI
- ICommand – механизъм за работа с команди
- MVVM – архитектурен шаблон за разделяне на логика и UI
Зареждане на проект в Visual Studio
- Отворете Visual Studio.
- Заредете Solution-а от предишните упражнения.
- Създайте нов WPF проект с име
WpfExample. - Добавете папки:
ViewViewModelModel
Създаване на InfoCommand
Имплементация на ICommand
- В папка
ViewModel→Add→New Item…→Class→InfoCommand.cs. - Добавете следния код:
using System;
using System.Windows;
using System.Windows.Input;
public class InfoCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) => true;
public void Execute(object parameter)
{
MessageBox.Show("Hello, world!");
}
}
Свързване на контроли към команди
- Създайте поле за командата в
MainWindow.xaml.cs:
private InfoCommand _infoCommand = new InfoCommand();
public InfoCommand InformationCommand => _infoCommand;
- Свържете Command в
MainWindow.xaml:
<Button Content="Info" Command="{Binding InformationCommand}" />
Добавяне на ViewModel и свързване на UI с него
Създаване на MainWindowViewModel
- В папка
ViewModel→Add→New Item…→Class→MainWindowViewModel.cs. - Имплементирайте
INotifyPropertyChangedи добавете ObservableCollection:
using System.Collections.ObjectModel;
using System.ComponentModel;
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
private ObservableCollection<string> _history = new ObservableCollection<string>();
public ObservableCollection<string> History
{
get => _history;
set { _history = value; OnPropertyChanged(nameof(History)); }
}
}
- Свържете ViewModel с
MainWindow.xaml:
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
Добавяне на команди с параметри
Създаване на AddCommand
- В папка
ViewModel→Add→New Item…→Class→AddCommand.cs. - Добавете следния код:
using System;
using System.Windows.Input;
public class AddCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) => parameter is MainWindowViewModel;
public void Execute(object parameter)
{
if (parameter is MainWindowViewModel vm)
{
vm.History.Add("New Entry");
}
}
}
- Добавете командата в
MainWindowViewModel:
private ICommand _addCommand;
public ICommand AddCommand => _addCommand ??= new AddCommand();
- Свържете я с UI в
MainWindow.xaml:
<Button Content="Add" Command="{Binding AddCommand}" CommandParameter="{Binding}" />
Заключение
След изпълнението на тези стъпки ще имаме WPF приложение, което използва MVVM, команди и ObservableCollection, за да управлява UI динамично.
Бележка: В следващи упражнения ще добавим сложна навигация и по-добра организация на ViewModel-ите.