『QQ:1353814576』

WPF+MVVM简单实际应用实例:轻松打造一个简易版任务管理器


WPF(Windows Presentation Foundation)和MVVM(Model-View-ViewModel)是一对强大的技术组合,用于构建现代、可扩展和易于维护的桌面应用程序。本文将以一个任务管理器的简单应用为例,演示如何使用WPF和MVVM模式开发一个基础的任务管理器程序。

WPF+MVVM简单实际应用实例:打造一个任务管理器

项目概述:

我们的任务管理器将具备以下功能:

  1. 显示正在运行的进程列表
  2. 实时监测进程的CPU和内存占用
  3. 允许用户终止选定的进程
  4. 提供搜索功能,方便用户查找特定进程

构建项目结构:

首先,创建一个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();
    }
}

  1. 创建进程列表: 在View中,使用DataGrid控件展示进程列表。通过绑定ViewModel中的进程集合,实现数据显示和更新。

  2. 实时监测进程资源: 在ViewModel中,使用System.Diagnostics命名空间提供的进程相关类,获取正在运行的进程列表。使用定时器定期更新进程的CPU和内存占用,并通过数据绑定将其显示在View上。

  3. 终止进程: 在View中,通过按钮或右键菜单提供终止进程的功能。在ViewModel中,处理用户的终止请求,并调用相应的方法终止选定的进程。

  4. 实现搜索功能: 在View中,添加一个搜索框,允许用户输入关键字进行进程搜索。在ViewModel中,根据用户输入更新进程列表,只显示符合搜索条件的进程。

  5. 添加其他功能: 根据需要,可以进一步完善应用程序,例如实现排序、筛选、进程详情查看等功能。

  6. 进行测试和调试: 在开发过程中,及时进行测试和调试,确保应用程序的稳定性和功能完整性。

在这个示例中,我们创建了一个简单的任务管理器应用程序,使用WPF+MVVM架构。ViewModel中的Processes属性绑定到View中的DataGrid控件,实现了进程列表的显示和更新。ViewModel通过UpdateProcesses方法获取正在运行的进程列表,并更新Processes属性。当MainWindow被激活时,自动调用UpdateProcesses方法以显示最新的进程信息。

请注意,这只是一个简单的示例,实际的任务管理器应用程序可能需要更多的功能和细节处理。