私はこれをしばらく理解しようとしていますが、実際に解決策を見つけるための正しい用語が不足していると推測しています。だからこれが重複している場合は私を許してください、しかし私は無駄なく検索しました。Dictionaryに格納されている列の値にDataGridを並べ替えます
私は他のアイテムを保持するための辞書を持っているアイテムのコレクションを持っています。辞書は文字列とオブジェクトのペアで、これを使って私が作ったクラスのインスタンスを保持しています。私は以下の簡単なサンプルを作成しました。
public MainPage()
{
InitializeComponent();
List<Holder> holders = new List<Holder>()
{
new Holder()
{
Attributes = new Dictionary<string,object>()
{
{
"TestKey1", new ComplexItem()
{
a = 15
}
}
},
ComplexItemExample = new ComplexItem()
{
a = 99
},
ComplexListExample = new List<ComplexItem>()
{
{
new ComplexItem()
{
a = 12
}
}
}
},
new Holder()
{
Attributes = new Dictionary<string,object>()
{
{
"TestKey1", new ComplexItem()
{
a = 10
}
}
},
ComplexItemExample = new ComplexItem()
{
a = 12
},
ComplexListExample = new List<ComplexItem>()
{
{
new ComplexItem()
{
a = 22
}
}
}
}
};
sampleDataGrid.Columns.Add(new DataGridTextColumn() { Binding = new Binding("Attributes[TestKey1].a"), CanUserSort = true, Header = "Dictionary Bound", SortMemberPath = "Attributes[TestKey1].a" });
sampleDataGrid.Columns.Add(new DataGridTextColumn() { Binding = new Binding("ComplexItemExample.a"), CanUserSort = true, Header = "Item Bound", SortMemberPath = "ComplexItemExample.a" });
sampleDataGrid.Columns.Add(new DataGridTextColumn() { Binding = new Binding("ComplexListExample[0].a"), CanUserSort = true, Header = "List Bound", SortMemberPath = "ComplexListExample[0].a" });
sampleDataGrid.ItemsSource = holders;
}
次に、簡略化したクラス定義を示します。
public class ComplexItem
{
public int a { get; set; }
public int b { get; set; }
public int c { get; set; }
}
public class Holder
{
public Dictionary<string, object> Attributes { get; set; }
public List<ComplexItem> ComplexListExample { get; set; }
public ComplexItem ComplexItemExample { get; set; }
}
そして、この例では、XAMLは以下のとおりです。
<Grid x:Name="LayoutRoot" Background="White">
<sdk:DataGrid AutoGenerateColumns="False" Name="sampleDataGrid" />
</Grid>
これで、列を並べ替えるときに問題が発生しました。何も起こりません。 SortMemberPathは辞書と正しく解決されていないものと思っていますが、これを解決するために紛失しています。助けや洞察力があれば大いに感謝します。
更新07-28-11:
ちょうどデータグリッドは、タイプリスト、辞書に載っていないのである所有者にバインドされていることを明確にします。実際の行は、問題なく解決されているディクショナリを経由してパスが設定されています。 SortMemberPathは同じものに設定されているのではなく、役に立たないものではありません。
私はHolderクラスを変更するアクセス権がありません。私はいくつかの情報で質問を更新します。私はどのように私は辞書にバインドしているかわかりません。私は辞書に保持されているアイテム(int a)にバインドしています(私は願っています)。私は、項目がリスト(このdoeはIComparableを実装していない)に保持されている同様のケースに対してsortが動作する例にさらに多くを追加しました。 – Daynew