2
<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に変換できないことを述べています。

この問題を解決するにはどうすればよいですか?

編集:Itemsourcesはによって提供されます

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

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

1 に答える 1

3

アクセスしているオブジェクトdi.Itemはタイプではなく、DataRowViewバインドしている実際のビジネスオブジェクトです。したがって、入力したものはすべて、をObservableCollection<object>介してアクセスできますdi.Item"

ちょうど試して

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

これがより明確になることを願っています。

于 2012-07-24T06:24:03.927 に答える