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_processes; public ObservableCollection 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 ( 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方法以显示最新的进程信息。
请注意,这只是一个简单的架构示例,实际的任务管理器应用程序还需要更多的功能和细节处理。