Хорошо, я уже некоторое время пытаюсь понять это, и я предполагаю, что мне просто не хватает правильной терминологии, чтобы действительно найти решение. Поэтому, пожалуйста, прости меня, если это дубликат, но я искал безрезультатно.
У меня есть коллекция предметов, в которой есть словарь для хранения других предметов. Словарь представляет собой пару строка-объект, и я использовал это для хранения экземпляра класса, который я создал. Я создал упрощенный образец ниже.
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:
Просто чтобы уточнить, что сетка данных связана с держателями типа List, а не словаря. Реальные строки имеют свои пути, установленные через словарь, который разрешается без каких-либо проблем. Не SortMemberPath настроен на то же самое, но безрезультатно.