Привязка списка String к ComboBox DataGridTemplateColumn

Вопрос может показаться довольно простым, но я не могу его понять и перепробовал все, что нашел. Он работает для списка классов, поскольку я могу привязать одно из свойств моего класса, но не для простой ObservableCollection 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 или свойство коллекции, потому что оба atm имеют имя ListOfString.

person blindmeis    schedule 30.06.2014
comment
Ух ты ! Оно работает ! Большое спасибо вам, blindmeis. Довольно просто, но теперь я понял. Я не публиковал свой код своего OC, потому что он примерно такой же, как ваш, с get и set, и не волнуйтесь, это имя просто тест на мой вопрос;) Он работает, но не отображает мое значение, когда Я меняю фокус в своих клетках ... Думаю, это другая проблема. - person Adrana; 30.06.2014