2010-10-01 63 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; 

}

相關問題