2010-10-01 127 views
4

如何确定SelectedCellValueDataGrid? (WPF)如何确定DataGrid中选定单元格的值? (WPF)

我的DataGrid有9个颜色和5行,我想知道点击行[0]的ValueValue

我用这个代码在Windows窗体:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    var a = dataGridView1[e.ColumnIndex, e.RowIndex].Value; 
} 

,但我不知道在WPF的等效代码。

回答

3

您应该使用DataGrid_SelectedCellsChanged事件。

private void dataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
    { 
     foreach (var item in e.AddedCells) 
     { 
      var col = item.Column as DataGridColumn; 
      var fc = col.GetCellContent(item.Item); 

      if (fc is CheckBox) 
      { 
       Debug.WriteLine("Values" + (fc as CheckBox).IsChecked); 
      } 
      else if(fc is TextBlock) 
      { 
       Debug.WriteLine("Values" + (fc as TextBlock).Text); 
      } 
      //// Like this for all available types of cells 
     } 
    } 

HTH

+0

THX很多头像我只想datagrid的价值[selectedrow] [第一colomn]!我的意思是,如果我点击[第三行,第五栏]它给了我[第三排,第一栏] – Shane 2010-10-01 14:22:04

3

确定选定单元格的值更像是一个WinForms。 WPF旨在以不同的方式工作;你的用户界面意图与逻辑分离。 DataGrid因此成为演示的工具,而不是被戳穿和推动价值的东西。

取而代之的是,使用WPF,您想要处理绑定到网格的对象,而不管它们如何显示。忘掉网格 - 只需从绑定对象列表中找出用户当前“选择”的对象。

的的SelectedItem是对电网本身并感谢WPF的卓越绑定机制的属性,你可以通过XAML这个值绑定到一个ViewModel属性:

ItemsSource="{Binding Orders, Mode=OneWay}" 
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}" 

当用户在选择一个项目网格中,双向绑定将使用该行中该对象的值更新ViewModel上的SelectedItem属性。

这样,您甚至不必处理网格或UI的知识。

我希望这是有道理的。我知道这是来自WinForms的一种不同的思路和思维方式。

+0

这是一个很好的解决方案:) – 2010-10-01 12:53:24

+0

我对数据绑定一无所知:( – Shane 2010-10-01 17:02:59

0
private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
    { 
     var item = e.AddedCells[0]; 
     { 
      var col = item.Column as DataGridColumn; 
      var fc = col.GetCellContent(item.Item); 

      if (fc is CheckBox) 
      { 

      } 
      else if (fc is TextBlock && col.DisplayIndex == 0) 
      { 
       textBlock1.Text = (fc as TextBlock).Text; 
      } 

     } 
    } 
0

有时结合的SelectedItem不工作(根据您的型号有多么疯狂的是,我要转置模型,所以一切都是颠倒和​​正常默认别科技工作的所有的时间 因为,
DataGrid中selectedCellChanged您可以通过访问绑定对象:

从订单[]的前一个例子假定每个订单将有数组亚目

foreach (var selectedCell in e.AddedCells)  
{ 
    var order = (Order)selectedCell.Item; 
    var subOrder = order.SubOrders[selectedCell.Column.DisplayIndex-1]; 

    var someValue = subOrder.Value; 

}

相关问题