Привязка списка строк к 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.

Другие вопросы по тегам