1

私はこのデータグリッドを持っています

<DataGrid Grid.Row="3" Name="DataGrid6S" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto">
    <DataGrid.Columns>
    <DataGridTextColumn Header="ID" Width="50" Binding="{Binding ID}" Visibility="Collapsed"></DataGridTextColumn>
        <DataGridTextColumn Header="Name" Width="200" Binding="{Binding Name}"></DataGridTextColumn>
        <DataGridTextColumn Header="Text" Width="200" Binding="{Binding Text}"></DataGridTextColumn>
        <DataGridTemplateColumn Header="Edit" Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Click="Button_Click" >View Details</Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

これは、次のコードによって入力されます。

class Test {
        public int W { get; set; }
        public string X { get; set; }
        public string Y { get; set; }
    }

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();

        List<Test> testList = new List<Test>();
        testList.Add(new Test() { W = 0, X = "hello", Y = "one" });
        testList.Add(new Test() { W = 1, X = "hello", Y = "two" });
        testList.Add(new Test() { W = 2, X = "hello", Y = "three" });
        testList.Add(new Test() { W = 3, X = "hello", Y = "four" });

        var query =
            from values in testList
            select new { ID = values.W, Name = values.X, Text = values.Y };

        DataGrid6S.ItemsSource = query;

    }

    private void Button_Click(object sender, RoutedEventArgs e) {
        var obj = ((FrameworkElement)sender).DataContext;
        // Can't access values because it's of an anoymous type.
        // What do I have to do to be able to access the values stored here?

    }
}

ボタンがクリックされたときに、そのボタンがクリックされた行のIDを知りたいのですが、行が匿名型で初期化されているためわかりません。クリックした行のID?

注:これは簡略化されたバージョンであり、クエリが5つの結合とwhere句で構成されていることを前提としています。

4

2 に答える 2

0

クエリで匿名タイプを使用するのはなぜですか?必要なすべてのデータを、そのデータとまったく同じ形式で保持できる優れたオブジェクトがすでにあります。匿名のクエリに変換することで、役立つ情報をすべて明示的に削除します。testListデータソースとして設定しTest、ボタンクリックでアイテムにアクセスするだけです。

于 2012-08-14T20:20:47.710 に答える
0

名前付きタイプを作成し、そのインスタンスを選択するだけです。匿名タイプは、作成されたスコープ内でのみ編集されるオブジェクト用です。また、Testクラスを直接使用してみませんか?唯一の違いはプロパティ名です。DataContextまた、はであるため、名前付きタイプにキャストすることを忘れないでくださいobject

于 2012-08-14T20:22:20.427 に答える