0

次のように、2 つのエンティティを結合して 2 つの列を返すクエリがあります。

var myQ = myDataContext1.Entity1.Join(myDataContext1.Entity2, a=>a.id, b=>b.id, (a, b)=> new Tuple<int, float>(a.id, b.something)).ToList(); 
MyDatagrid.ItemSources = myQ;

うまくいきました。しかし、私のデータグリッドでは、2 つの列に「item1」と「item2」というラベルが付けられています。私はそれらを正しい名前に変更しようとしました。これまでのところ、私はそれを行うことができませんでした。私は使用しようとしました:

MyDatagrid.Columns.Add(new DataGridTextColumns{ Header = "Aheader", Binding= new System.Windows.Data.Binding("a.id");

バインディング名が間違っているはずなので、すべてのデータが消えてしまいます。しかし、Bindingの後に何を入れればいいのかわかりません...それから、私は試しました

MyDataGrid.Columns[0].Header = "myID"

機能せず、列コレクションに列がなかったことが毎回通知されます。したがって、ヘッダーの変更は、データグリッドが読み込まれてイベントが追加された後に発生する必要があると思います。

MyDataGrid.loaded += (o, e) =>{MyDataGrid.Columns[0].Header = "myID"};

それでも同じエラー.....ここで何をすべきか考えていますか? ありがとう。

4

2 に答える 2

1

バインディングは Item1 と Item2 である必要があります。AutoGenerateColumns も false に設定する必要があり、XAML で列を定義することをお勧めします。例えば

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=Item1}" Header="Header 1"></DataGridTextColumn>
        <DataGridTextColumn Binding="{Binding Path=Item2}" Header="Header 2"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

タプルの代わりに匿名型を使用する方がよい場合もあります。そうすれば、バインディングはより意味のあるものになる可能性があります。

于 2012-07-13T01:17:37.913 に答える
0

MikeKulls のコードを C# に変換:

myDataGrid.Columns.Add(new DataGridTextColumn {Header ="myHeader" Binding = new System.Windows.Data.Binding("Item1")});

于 2012-07-13T15:55:41.077 に答える