2016-08-02 88 views
0

当我在DataGrid中选择一个项目时,看起来我无法更改选择。我可以点击另一行,但它不会做任何事情。我知道这一点,因为当SelectionChanged行为发生在这个充满了客户的数据网格时,我有一个弹出框显示那里的名字。名字总是一样的。下面是C#代码获取DataGrid以更改所选项目

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

我想它,这样我每次选择一行的时间,也就是所选择的项目

回答

0

参考下面的定义,我认为你正试图引用所选实际上已经设置的项目。

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); 
    } 
} 
+0

有时候它说,所选择的项目是空的,为什么会是这样? –

+1

SelectedItem是在网格上选择的项目。在这个事件处理程序中,SelectedItem只在执行sectionChanged事件之后设置。因此,如果最初没有SelectedItem(null),并且您试图在上面的方法中检查它,则它将为空,因为它尚未设置。 – onemorecupofcoffee

+1

这就是为什么您需要使用args.AddedItems - 这些是在事件处理程序(SelectionChanged)被触发后将添加到选择的项目 – onemorecupofcoffee