WPF+MVVM简单实际应用实例:打造一个任务管理器
WPF(Windows Presentation Foundation)和MVVM(Model-View-ViewModel)是一对强大的技术组合,用于构建现代、可扩展和易于维护的桌面应用程序。本文将以一个任务管理器的简单应用为例,演示如何使用WPF和MVVM模式开发一个基础的任务管理器程序。
项目概述:
我们的任务管理器将具备以下功能:
- 显示正在运行的进程列表
- 实时监测进程的CPU和内存占用
- 允许用户终止选定的进程
- 提供搜索功能,方便用户查找特定进程
构建项目结构:
首先,创建一个WPF应用程序项目,并根据MVVM模式进行项目结构的划分。
Model:定义与任务管理器相关的数据模型和业务逻辑。
public class ProcessModel
{
public string Name { get; set; }
public int Id { get; set; }
public float CpuUsage { get; set; }
public float MemoryUsage { get; set; }
}
View:创建XAML界面,包括进程列表的显示、搜索框、终止按钮等控件(篇幅有限 这些具体按钮功能这里就不实现了 可以自行发挥)。
<Window x:Class="TaskManager.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TaskManager"
Title="Task Manager" Height="450" Width="800">
<Grid>
<DataGrid ItemsSource="{Binding Processes}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="Auto"/>
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="Auto"/>
<DataGridTextColumn Header="CPU Usage" Binding="{Binding CpuUsage}" Width="Auto"/>
<DataGridTextColumn Header="Memory Usage" Binding="{Binding MemoryUsage}" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
ViewModel:连接Model和View,处理用户交互和数据绑定。
public class ProcessViewModel : INotifyPropertyChanged
{
private ObservableCollection<ProcessModel> _processes;
public ObservableCollection<ProcessModel> Processes
{
get { return _processes; }
set
{
_processes = value;
OnPropertyChanged(nameof(Processes));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public void UpdateProcesses()
{
var processes = Process.GetProcesses();
Processes = new ObservableCollection<ProcessModel>(
processes.Select(p => new ProcessModel
{
Name = p.ProcessName,
Id = p.Id,
CpuUsage = GetCpuUsage(p),
MemoryUsage = GetMemoryUsage(p)
}).ToList()
);
}
private float GetCpuUsage(Process process)
{
// 获取进程的CPU占用率
// 实现略(根据具体需求使用相关API)
}
private float GetMemoryUsage(Process process)
{
// 获取进程的内存占用率
// 实现略(根据具体需求使用相关API)
}
}
ViewModel=>DataContext
public partial class MainWindow : Window
{
private ProcessViewModel _viewModel;
public MainWindow()
{
InitializeComponent();
_viewModel = new ProcessViewModel();
DataContext = _viewModel;
}
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
_viewModel.UpdateProcesses();
}
}
创建进程列表: 在View中,使用DataGrid控件展示进程列表。通过绑定ViewModel中的进程集合,实现数据显示和更新。
实时监测进程资源: 在ViewModel中,使用System.Diagnostics命名空间提供的进程相关类,获取正在运行的进程列表。使用定时器定期更新进程的CPU和内存占用,并通过数据绑定将其显示在View上。
终止进程: 在View中,通过按钮或右键菜单提供终止进程的功能。在ViewModel中,处理用户的终止请求,并调用相应的方法终止选定的进程。
实现搜索功能: 在View中,添加一个搜索框,允许用户输入关键字进行进程搜索。在ViewModel中,根据用户输入更新进程列表,只显示符合搜索条件的进程。
添加其他功能: 根据需要,可以进一步完善应用程序,例如实现排序、筛选、进程详情查看等功能。
进行测试和调试: 在开发过程中,及时进行测试和调试,确保应用程序的稳定性和功能完整性。
在这个示例中,我们创建了一个简单的任务管理器应用程序,使用WPF+MVVM架构。ViewModel中的Processes属性绑定到View中的DataGrid控件,实现了进程列表的显示和更新。ViewModel通过UpdateProcesses方法获取正在运行的进程列表,并更新Processes属性。当MainWindow被激活时,自动调用UpdateProcesses方法以显示最新的进程信息。
请注意,这只是一个简单的架构示例,实际的任务管理器应用程序还需要更多的功能和细节处理。