2012-07-24 6 views
1
<UserControl x:Class="DDCUI.CommDiagnosisWPFCtrl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="800" Width="300"> 
    <StackPanel> 
     <DataGrid MinHeight="300" MaxHeight="600" AutoGenerateColumns="False" Name="DGComm" CanUserResizeColumns="True" IsReadOnly="True" ItemsSource="{Binding Source=dataGridRows}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="No." Binding="{Binding Number}" Width="0.1*"/> 
       <DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="0.1*" /> 
       <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="0.15*" /> 
       <DataGridTextColumn Header="Source" Binding="{Binding Source}" Width="0.15*" /> 
       <DataGridTextColumn Header="Destination" Binding="{Binding Destination}" Width="0.15*" /> 
       <DataGridTextColumn Header="Data" Binding="{Binding Data}" Width="0.5*" /> 
      </DataGrid.Columns> 
     </DataGrid> 
     <RichTextBox Height="150" Name="RtbHexCode"/> 
     <TreeView Height="200" Name="TreeViewDecode"/> 

    </StackPanel> 
</UserControl> 
private void DGComm_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    //e.AddedCells[0].Column 
    IList<DataGridCellInfo> cells = e.AddedCells; 
    foreach (DataGridCellInfo di in cells) 
    { 
     DataRowView dvr = (DataRowView)di.Item; 
     MessageBox.Show(di.ToString()); 
    } 
} 

Я хочу, чтобы иметь возможность манипулировать выбранную ячейку. Я пытаюсь напечатать имя ячейки, нажатой, но она бросает недопустимое исключение литых в DataRowView dvr = (DataRowView) di.Item; заявив, что я не могу преобразовать DataSource в RowView.Datagrid Cell Нажмите событие

Как исправить эту проблему?

Edit: Itemsources обеспечивается

public ObservableCollection<object> dataGridRows = new ObservableCollection<object>(); 

private void InitProtocolParsers() 
     { 
      DGComm.ItemsSource = dataGridRows; 
+0

Как вы предоставляете Itemsource для datagrid? –

ответ

3

Объекта вы получаете доступ через di.Item не тип DataRowView но фактический бизнес-объект является обязательным для. Таким образом, все, что вы разместите в своем ObservableCollection<object>, можно получить через di.Item".

Просто попробуйте

MessageBox.Show(di.Item.ToString()) 

и это получит понятнее, я надеюсь.

Смежные вопросы