Привязка списка строк к ComboBox объекта DataGridTemplateColumn
Вопрос может показаться довольно простым, но я не могу его понять, и я попробовал все, что нашел. Это работает для списка классов, так как я могу связать одно из свойств моего класса, но не для простой ObservableCollection of String.
Вот мой код в Xaml:
<DataGridTemplateColumn x:Name="VT" Header="VT" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding ListOfString}"
SelectedValuePath="ListOfString"
DisplayMemberPath="ListOfString"
ItemsSource="{Binding RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.ListOfString}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Мой код работает нормально, так как когда я открываю выпадающий список, он отображает столько строк, сколько есть элементов внутри, но строки пусты. Я также пытался работать с CellEditingTemplate, как здесь, но в лучшем случае он дает тот же результат. Я думаю, что я ошибаюсь в этих свойствах DisplayMemberPath и других, но я не вижу, что я должен получить внутри.
Итак, как я могу правильно связать свою коллекцию ObservableCollection с моим ComboBox?
Спасибо!
1 ответ
Если ваш ListOfString выглядит так:
public ObservableCollection<string> ListOfString {get;set;}
тогда вы должны просто удалить SelectedValuePath и DisplayMemberPath. потому что в противном случае wpf ищет свойство ListOfString, которое не существует в строках:)
<ComboBox SelectedItem="{Binding ListOfString}"
ItemsSource="{Binding RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.ListOfString}"/>
и если это не так, вы должны опубликовать код для вашего свойства ListOfString.
Между прочим, вы должны переименовать свойство SelectedItem или свойство collection, потому что они оба называются ListOfString.