WPF ComboBox не показывает текущий элемент, когда он является объектом DependencyObject - PullRequest
4 голосов
/ 24 сентября 2010

У меня есть очень простой Combobox в моем XAML:

<ComboBox Name="cmb1" Width="200" Height="23" ItemsSource="{Binding}" />

, и это мой код:

public class Test //: System.Windows.DependencyObject
{
    public string Name { get; set; }

    public override string ToString() { return Name; }
}

public MainWindow()
{
    InitializeComponent();

    var col = new ObservableCollection<Test>();
    cmb1.DataContext = col;
    col.Add(new Test { Name = "A" });
    col.Add(new Test { Name = "B" });
    col.Add(new Test { Name = "C" });
    col.Add(new Test { Name = "D" });
}

Пока Test классНЕ унаследован от DependencyObject все хорошо.Но когда он наследуется, ComboBox не показывает текущий элемент , когда он не развернут.Текущий элемент выбирается, когда я нажимаю на ComboBox и вижу его раскрывающийся список.alt text

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Похожие: см. этот ответ У меня есть еще один вопрос. Исходя из этого, я думаю, что это, возможно, ошибка. И если вы выполните хотя бы одно из следующего, выбор должен сработать:

  1. Укажите шаблон элемента.
  2. Укажите ItemTemplateSelector.
  3. Укажите ItemStringFormat.
  4. Получите предмет из UIElement.

РЕДАКТИРОВАТЬ: Вопрос был удален. Просто посмотрите мое объяснение на другой ответ на этот вопрос.

1 голос
/ 24 сентября 2010

Это был ответ karmicpuppet в удаленном вопросе:

Это интересно. Ну я посмотрел в классе ComboBox с помощью Reflector и я вижу это в ComboBox.UpdateSelectionBoxItems () метод, часть этого делает что-то как:

Если ItemTemplate, ItemTemplateSelector, и ItemStringFormat не были установлены, и выбранный элемент является объектом DependencyObject это не является производным от UIElement, вызвать ExtractString (selectedItem) способ.

ComboBox.ExtractString (dObj) метод, с другой стороны, по-видимому проверяет, является ли selectedItem (который является DependencyObject) либо TextBlock, Visual или TextElement для отображения соответствующего строка. В противном случае он вернется string.Empty.

Так что самым простым решением было бы установить это на Combobox:

ItemStringFormat="{}{0}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...