【问题标题】:Getting DataGrid to Change Selected Item Selected让 DataGrid 更改所选项目
【发布时间】:2026-02-16 18:05:01
【问题描述】:

当我在 DataGrid 中选择一个项目时,我似乎无法更改选择。我可以单击另一行,但它不会做任何事情。我知道这一点,因为当这个充满客户的数据网格发生 SelectionChanged 操作时,我会弹出一个显示名称的弹出框。名字总是一样的。这是C#代码

priavate void dataGridCustomers_SelectionChanged(object sender, SelectionChangedEventArgs)
{
    Customer selectedCustomer = (Customer) dataGridCustomers.SelectedItem;
    MessageBox.Show(selectedCustomer.FirstName);
}

我希望这样每次我选择一行时,就是被选中的项目

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    参考下面的定义,我认为您正在尝试在实际设置之前引用所选项目。

    https://msdn.microsoft.com/en-us/library/system.windows.controls.selectionchangedeventargs(v=vs.110).aspx

    这样的事情应该可以解决问题:

    private void dataGridCustomers_SelectionChanged(object sender, SelectionChangedEventArgs args)
    {
        if (args.AddedItems.Length > 0)
        {
            Customer selectedCustomer = (Customer) args.AddedItems[0];
            MessageBox.Show(selectedCustomer.FirstName);
        }
    }
    

    【讨论】:

    • 有时会说选中项为空,这是为什么呢?
    • SelectedItem 是在网格上选择的项目。在此事件处理程序上,SelectedItem 仅在 sectionChanged 事件执行后设置。因此,如果最初没有 SelectedItem (null),而您尝试在上面的方法中对其进行检查,则它将为 null,因为它尚未设置。
    • 这就是您需要使用 args.AddedItems 的原因 - 这些项目将在事件处理程序 (SelectionChanged) 被触发后添加到选择中
    • 现在每当我选择第二个项目时都会出现延迟