У меня есть список пользовательских объектов: скажем, Fruits с двумя строковыми свойствами Name и Color. Они в списке.
private readonly List<Fruit> fruitList = new List<Fruit>();
Затем я загружаю фруктовые объекты в список.
Я пытаюсь связать этот список с WPF Datagrid:
C #:
dgFruit.ItemsSource = "{Binding}";
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding Path=fruitList}" >
<toolkit:DataGrid.Columns>
<toolkit:DataGridComboBoxColumn
Header="Name"
SelectedValueBinding="{Binding Path=Name}"
TextBinding="{Binding Path=Name}" Width="5*" />
<toolkit:DataGridComboBoxColumn
Header="Color"
SelectedValueBinding="{Binding Path=Color}"
TextBinding="{Binding Path=Color}" Width="5*" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Причина, по которой они находятся в выпадающем списке, заключается в том, что я хочу, чтобы пользователь мог изменять отношения. Это не настоящий пример, но вы поняли идею. Скажем для примера, что фрукты не созрели, поэтому они меняют цвет банана на зеленый:)
Мне не повезло, что я получил эти элементы в таблице данных ... и в дальнейшем я хочу щелкнуть элемент в ячейке данных, чтобы перейти в комбинированный список и показать все возможные типы названий и цветов фруктов (так что они могут изменить отношения)
Вот ошибка, которую я получаю:
System.Windows.Data Error: 39 : BindingExpression path error: 'Color' property not found on 'object' ''Char' (HashCode=6750311)'. BindingExpression:Path=Color; DataItem='Char' (HashCode=6750311); target element is 'TextBlockComboBox' (Name=''); target property is 'Text' (type 'String')
Может кто-нибудь помочь? Причина, по которой я настраиваю свои столбцы в xaml, заключается в том, что я могу установить ширину для размера звезды и иметь равную ширину столбцов.
Я вижу, что большинство примеров используют ObservableCollection, но если я могу выполнить привязку к списку, почему я должен использовать это?
Пожалуйста, позвольте мне знать, если мой пример требует дальнейших разъяснений
Редактировать: что у меня сейчас:
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding}"
AutoGenerateColumns="False">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn
Header="Name"
Width="5*"/>
<toolkit:DataGridComboBoxColumn
Header="Color"
Width="5*"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
C #:
DataContext = fruitList;
На самом деле, когда я использую DataContext, я ничего не получаю. Когда я использую ItemSource, я получаю пустые строки, но правильное количество строк, так что это выглядит больше вдоль правильных строк.
Я могу получить данные, которые будут показаны, если разрешу автоматическое создание столбцов. Если я установлю для autogeneratecolumns значение false, а затем укажу мои столбцы в xaml, как я хочу использовать размер звездочки, я получу правильное количество столбцов, но без текста!