Datagrid-Zelle Click-Ereignis
<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());
}
}
Ich möchte in der Lage sein, um die Bearbeitung der ausgewählten Zelle. Ich versuche zu drucken, wird der name der Zelle geklickt aber es wirft eine invalid cast exception auf DataRowView dvr = (DataRowView)di.Element; die besagt, dass ich nicht in eine DataSource in RowView.
Wie kann ich dieses Problem lösen?
Edit: Itemsources wird durch
public ObservableCollection<object> dataGridRows = new ObservableCollection<object>();
private void InitProtocolParsers()
{
DGComm.ItemsSource = dataGridRows;
- Wie sind Sie auf die Bereitstellung von Itemsource an die datagrid?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Objekt, auf das Sie zugreifen über
di.Item
ist nicht der TypDataRowView
aber die eigentliche business-Objekt, das Sie verbindlich sind.Also, was auch immer Sie setzen in Ihrer
ObservableCollection<object>
zugegriffen werden kann, überdi.Item"
.Nur versuchen
und dies wird klarer, hoffe ich.