WPF MVVM检索数据网格选定的行

作者:编程家 分类: swift 时间:2025-07-31

使用WPF MVVM检索数据网格选定的行

在WPF应用程序开发中,MVVM(Model-View-ViewModel)是一种常用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和视图模型(ViewModel)。MVVM模式的一个常见需求是在数据网格中选择一行,并使用选定的行执行一些特定操作。本文将介绍如何使用MVVM模式检索数据网格中选定的行,并提供一个示例代码。

1. 创建数据模型和视图模型

首先,我们需要创建一个数据模型,该模型表示数据网格中的每一行。例如,我们可以创建一个名为"Person"的数据模型,该模型有"Name"和"Age"两个属性。

csharp

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

接下来,我们需要创建一个视图模型,该视图模型负责管理数据模型并将其展示给视图。在这个示例中,我们创建一个名为"MainViewModel"的视图模型,并包含一个名为"People"的可观察集合,用于存储所有的"Person"对象。

csharp

public class MainViewModel : INotifyPropertyChanged

{

private ObservableCollection _people;

public ObservableCollection People

{

get { return _people; }

set

{

_people = value;

OnPropertyChanged(nameof(People));

}

}

public MainViewModel()

{

// 初始化People集合,并添加一些示例数据

People = new ObservableCollection

{

new Person { Name = "John", Age = 25 },

new Person { Name = "Jane", Age = 30 },

new Person { Name = "Bob", Age = 35 }

};

}

// 实现INotifyPropertyChanged接口,用于在属性值更改时通知视图更新

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)

{

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

}

2. 创建视图并绑定数据

接下来,我们需要创建一个视图来展示数据网格,并将数据绑定到视图模型。在这个示例中,我们创建一个名为"MainWindow"的窗口,并在窗口的XAML中添加一个数据网格(DataGrid)控件,并将其绑定到视图模型的"People"属性。

xaml

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="clr-namespace:WpfApp"

Title="MainWindow" Height="450" Width="800">

3. 检索选定的行

一旦我们完成了数据模型、视图模型和视图的创建和绑定,我们就可以在视图模型中添加一个命令(Command),以检索选定的行。在这个示例中,我们添加一个名为"GetSelectedRowCommand"的命令,并在命令的执行方法中获取选定的行。

csharp

public class MainViewModel : INotifyPropertyChanged

{

// ...

public ICommand GetSelectedRowCommand { get; }

public MainViewModel()

{

// ...

GetSelectedRowCommand = new RelayCommand(GetSelectedRow);

}

private void GetSelectedRow()

{

// 获取选定的行

Person selectedPerson = People.FirstOrDefault(p => p.IsSelected);

if (selectedPerson != null)

{

// 执行特定操作,如打印选定的行的属性值

Console.WriteLine($"Selected person: {selectedPerson.Name}, Age: {selectedPerson.Age}");

}

}

}

在上述示例代码中,我们使用了一个自定义的"RelayCommand"类来实现命令的执行。您可以根据自己的需求实现自己的命令类,或者使用现有的MVVM框架提供的命令类。

4. 添加按钮并绑定命令

最后,我们需要在视图中添加一个按钮,并将该按钮的命令绑定到视图模型中的"GetSelectedRowCommand"属性。这样,当用户点击按钮时,命令将被执行,选定的行将被检索并执行相应的操作。

xaml

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="clr-namespace:WpfApp"

Title="MainWindow" Height="450" Width="800">

在上述示例代码中,我们使用了一个名为"Button"的控件,并将其"Command"属性绑定到视图模型中的"GetSelectedRowCommand"属性。这样,当用户点击按钮时,"GetSelectedRowCommand"命令将被执行,选定的行将被检索并执行特定操作。

通过使用WPF MVVM模式,我们可以轻松地检索数据网格中选定的行,并在视图模型中执行特定操作。在本文中,我们介绍了如何创建数据模型、视图模型和视图,并演示了如何绑定数据、添加命令以及在选定的行上执行操作的示例代码。希望本文对您理解和应用WPF MVVM模式有所帮助!