WPF: привязка DataGrid к списку ‹Product› с привязкой DataGridComboBoxColumn к списку ‹Category›?

У меня есть DataGrid с ItemsSource, установленным для списка продуктов, и у меня есть DataGridComboBoxColumn внутри DataGrid с ItemsSource, установленным для списка категорий. Таким образом, я хочу, чтобы пользователь выбирал определенную категорию для каждого продукта.

Всегда получаю ошибку привязки:

Ошибка пути BindingExpression: свойство «Категории» не найдено в «объекте» «Продукт» (хэш)

Что ж, я не хочу, чтобы список категорий был частью сущности продукта как отношение 1: N, хотя это могло бы работать таким образом.

Я хочу держать их отдельно.

Кто-нибудь знает обходной путь?


person msfanboy    schedule 18.06.2010    source источник


Ответы (3)


Создайте класс со статическим свойством, например

static class ValueLists
{
   public static IEnumerable<Category> Categories {get {... }}
}

и используйте следующую привязку

ItemsSource="{x:Static myNs:ValueList.Categories}" />
person STO    schedule 18.06.2010
comment
Я нашел хорошую ссылку, посвященную тому же материалу, который мне нужен: stackoverflow.com/questions/1633800/ - person msfanboy; 19.06.2010
comment
Я не могу реализовать INotifyPropertChanged в статическом классе, что мне нужно ;-) вместо статической привязки не сработает? = ›ItemsSource = {Binding Path = DataContext.Categories, RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Type Window}}} IsReadOnly = True Background = White /› - person msfanboy; 20.06.2010

Это, вероятно, имеет отношение к вашей проблеме.

Что здесь происходит?
Коллекция Columns - это просто свойство в Datagrid; эта коллекция не находится в логическом (или визуальном) дереве, поэтому DataContext не наследуется, что приводит к не к чему привязываться.

person ArildF    schedule 19.06.2010

это своего рода поздний ответ, но, чтобы поделиться знаниями, я нашел следующее:

Связывание столбца WPF DataGridComboBoxColumn с MVVM

Этот ответ показывает, что преобразование второго списка в статический класс не всегда является обязательным. Вы всегда можете указать RelativeSource и выполнить поиск определенного предка, а затем привязать его к " другой "список, который есть в вашей ViewModel.

person Jportelas    schedule 18.09.2013