Текст не будет отображаться для выбранного элемента в ComboBox - PullRequest
1 голос
/ 11 мая 2009

Я чувствую себя очень глупо, когда спрашиваю об этом, но я бился больше 8 часов. Как заставить выбранный элемент отображать его текст в поле со списком WPF при его выборе?

Diplay Options

Выше находится диалоговое окно параметров, которое позволяет пользователям выбирать и настраивать доступные дисплеи турниров. Проблема в том, что выбранный элемент поля со списком показывает UserControl вместо отображаемого имени.

В окне загружено :

        //_displayer is a private member populated using MEF
        //[ImportMany(typeof (IDisplayer))] 
        //private IEnumerable<IDisplayer> _displayers;
        DisplayTypeComboBox.ItemsSource = _displayers;

ComboBox Xaml:

   <ComboBox
     Name="DisplayTypeComboBox"
     Grid.Column="1"
     Grid.ColumnSpan="2"
     Grid.Row="1" 
     IsEditable="False"
     SelectionChanged="DisplayTypeComboBox_SelectionChanged">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <ComboBoxItem Content="{Binding DisplayerName}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
   </ComboBox>

IDisplayer:

public interface IDisplayer
{
    string DisplayDataLocation { get; set; }
    string DisplayerName { get; }
    string DisplayerDescription { get;}
    bool WatcherEnabled { get; }
    UserControl View { get; }
    string DisplayerImageLeft { get; set; }
    string DisplayerImageRight { get; set; }
    void Update();
}

Ответы [ 4 ]

1 голос
/ 11 июня 2009

Я столкнулся с тем же. Мне тоже понадобилось время. :( Вы должны были использовать ItemContainerStyle, а не ItemTemplate. Поскольку ComboBox оборачивает внутренние элементы с помощью ComboBoxItem - вы в основном обернули ComboBoxItem другим.

0 голосов
/ 11 мая 2009

Проверьте, что член DisplayerName на самом деле содержит. Скорее всего, он содержит имя UserControl вместо отображаемого имени.

0 голосов
/ 14 мая 2009

Я даже не хочу думать о том, сколько часов я потратил, пытаясь решить, что должно быть простой проблемой. Почему так трудно, чтобы выбранный вами текст отображался как выбранное значение? Я сдаюсь, WPF, вы меня обманули. Я изменил элемент управления на список, он занимает больше места для отображения выбираемых элементов, но по крайней мере это работает.

   <ListBox
     Name="DisplayTypeComboBox"
     Grid.Column="1"
     Grid.ColumnSpan="2"
     Grid.Row="1" 
     SelectionChanged="DisplayType_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding DisplayerName}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

alt text

0 голосов
/ 11 мая 2009

Попробуйте использовать TextBlock для привязки к DisplayerName вместо ComboboxItem. Я считаю, что когда вы устанавливаете источник предметов, комбинированный элемент управления автоматически оборачивает элементы внутри элементов управления comboboxitems.

Редактировать: я неправильно понял ваш вопрос. Попробуйте установить SelectionBoxItemTemplate.

...