Связывание в Combobox в WPF - PullRequest
       27

Связывание в Combobox в WPF

3 голосов
/ 17 сентября 2010

Я новичок в wpf.На самом деле я создаю ComboBox, который получает данные из базы данных.ComboBox отлично работает на этом этапе без стиля.

Я отредактировал ControlTemplate элемента управления ComboboxItem в таблице стилей, как словарь ресурсов.

Если Style относится к ComboBox со статическими данными, стиль работает отлично.Но если стиль применяется к ComboBox с динамическими данными (в данном случае привязка к базе данных), список элементов возвращает только объект (показанные элементы аналогичны «Class.Method.Property»), но не содержимоесвойство, которое мне нужно показать.

Я пробовал все, и я прочитал все в Интернете о стилях xaml и шаблонах ComboBox, но я не смог решить проблему.

Мой ContentPresenter выглядит так, что возвращает объект привязки данных:

<ContentPresenter
        ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
        Content="{TemplateBinding ContentControl.Content}"/>

Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 17 сентября 2010

Я недавно столкнулся с той же проблемой, и чтобы исправить ее, мой ведущий контента теперь выглядит так:

<ContentPresenter                            
    Content="{TemplateBinding ComboBox.SelectionBoxItem}"
    ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}"
    ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" /> 

Моя проблема, так же как и ваша, заключалась в том, что мне не хватало ContentTemplateSelector. Кроме того, если у вас возникли проблемы с неправильным отображением раскрывающегося списка, я обнаружил, что в стиле ComboBoxItem вы можете оставить предъявитель содержимого пустым (<ContentPresenter />) и он будет отображаться правильно.

4 голосов
/ 17 сентября 2010

Отображается «Class.Method.Property», потому что WPF не знает, как отображать ваш класс.Вам нужен DataTemplate для вашего класса.

Если вам это не нужно, я бы не стал копаться в шаблонах так глубоко, как в ваших примерах.

Если у вас есть привязанный к данным ComboBox с объектами, и вы просто хотите отобразить свойство связанного объекта, которое вы можете сделать:

 <ComboBox ItemsSource="{Binding PersonList}"
                  DisplayMemberPath="FullName" />

Если вы хотите более расширенное отображение, вы можете установитьItemTemplate.

<ComboBox ItemsSource="{Binding PersonList}">
            <ComboBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Person}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FullName}" />
                        <TextBlock Text="{Binding Age}" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
...