WPF DataGrid的CurrentCellChanged事件如何获取单元格内容

4

我有一个 WPFDataGrid。我想要在用户编辑后获取单元格的值。这个 DataGrid 已经填充了数据,用户可以编辑之前的数据。为了保存数据,我希望从一个 事件处理程序 中获取单元格数据。

请给我一个简单的代码来实现它。建议使用一个 事件处理程序


虽然我认为下面有一个很好的答案,但你应该考虑使用WPF的内置数据绑定。它可以使许多常见的数据任务更快、更容易完成。 - Jasper
1个回答

10

您可以使用 CellEditEnding 事件,在用户编辑单元格时得到通知。

下面是一个简单的程序示例:

XAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="500" Width="500">
    <Grid>
        <DataGrid x:Name="grid" CellEditEnding="cellEditEnding" />
    </Grid>
</Window>

后台代码

public partial class MainWindow : Window
{
    public class MyClass
    {
        public string Prop1 { get; set; }
        public string Prop2 { get; set; }
        public string Prop3 { get; set; }
    }

    public MainWindow()
    {
        InitializeComponent();

        var objects = new[] 
        { 
            new MyClass { Prop1 = "Object1", Prop2 = "Test1", Prop3 = "Hello" },
            new MyClass { Prop1 = "Object2", Prop2 = "Test2", Prop3 = "Goodbye" },
            new MyClass { Prop1 = "Object3", Prop2 = "Test3", Prop3 = "Welcome" }
        };

        grid.ItemsSource = objects;
    }

    private void cellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        //Only handles cases where the cell contains a TextBox
        var editedTextbox = e.EditingElement as TextBox;

        if (editedTextbox != null)
            MessageBox.Show("Value after edit: " + editedTextbox.Text);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接