以下是一些关于C#中MVVM(Model-View-ViewModel)模式的基础知识:
1. 模型 (Model)
模型负责表示数据和业务逻辑,通常包括数据库访问、文件操作等。它不包含任何用户界面相关的代码。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
// 业务逻辑方法,例如验证或计算等
}
2. 视图模型 (ViewModel)
视图模型是MVVM模式的核心部分。它包含UI相关的数据和操作,并提供用于更新用户界面的命令和属性。
using System.Collections.ObjectModel;
using System.ComponentModel;
public class MainViewModel : INotifyPropertyChanged
{
private ObservableCollection
public ObservableCollection
{
get { return _people; }
set
{
_people = value;
OnPropertyChanged(nameof(People));
}
}
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
// 命令,例如按钮点击事件处理程序
private RelayCommand _addPersonCommand;
public RelayCommand AddPersonCommand => _addPersonCommand ??= new RelayCommand(AddPerson);
private void AddPerson()
{
People.Add(new Person { Name = "New Person" });
}
}
3. 视图 (View)
视图是用户界面的表示,通常是一个Windows窗体或WPF控件。它绑定到视图模型中的属性和命令。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MVVM Example" Height="450" Width="800">
4. 数据绑定 (Data Binding)
数据绑定是MVVM模式的关键特性,它允许视图模型和UI元素之间进行实时通信。
5. 命令 (Commands)
命令是一种用于处理UI事件的类,通常使用RelayCommand来实现。
using System;
using System.Windows.Input;
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func
public event EventHandler? CanExecuteChanged;
public RelayCommand(Action execute, Func
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute?.Invoke();
}
}
6. 视图模型的初始化
视图模型通常需要在构造函数中进行必要的初始化。
public class MainViewModel : INotifyPropertyChanged
{
private ObservableCollection
public ObservableCollection
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public MainViewModel()
{
People = new ObservableCollection
{
new Person { Id = 1, Name = "Alice", BirthDate = DateTime.Now },
new Person { Id = 2, Name = "Bob", BirthDate = DateTime.Now }
};
AddPersonCommand = new RelayCommand(AddPerson);
}
private readonly RelayCommand _addPersonCommand;
public RelayCommand AddPersonCommand { get; set; }
private void AddPerson()
{
People.Add(new Person { Name = "New Person" });
}
}
总结
MVVM模式是一种有效的UI架构,它通过分离视图和逻辑来提高代码的可维护性和测试性。通过以上内容,你可以开始构建自己的WPF或Windows Forms应用程序,并使用MVVM模式进行开发。
希望这些知识点对你有所帮助!