Как объединить два источника в Коллекцию и показать их правильно в выпадающем списке?
У меня есть код XAML, который сводит меня с ума. Все началось с добавления фиктивного элемента для значения, на которое нет ссылок.
Для этого мне пришлось реализовать CollectionViewSource
и CompositeCollection
, Теперь я не могу выбрать первый элемент Combobox, он появляется, но я не могу выбрать его, потому что я установил DisplayMemberPath
в XAML (я так думаю). Также разделитель выглядит не так, как ожидалось.
Позволь мне показать тебе:
Если я не установлю XAML DisplayMemberPath
Я могу использовать Dummy Item, но связанные элементы отображаются некорректно:
XAML:
<ComboBox x:Name="G_cb_content_zuordnung"
Margin="165,0,0,0"
Grid.Row="1"
SelectedIndex="0"
VerticalAlignment="Top"
DisplayMemberPath="PartnerID"
HorizontalAlignment="Left"
Width="119">
<ComboBox.Resources>
<CollectionViewSource x:Key="ComboCollection" Source="{Binding Path=mySelectedItem.Stammkinder}" />
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="Ohne Stammnummer" Name="NoPID" />
<Separator />
<CollectionContainer Collection="{Binding Source={StaticResource ComboCollection}, Mode=OneWay}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
Все, что мне нужно, это элемент комбинированного списка-пустышки, который отображается сверху ObservableCollection<myClass>
, Мой образ мышления неправильный? Есть ли более разумное решение? Я что-то упускаю в своем решении?
1 ответ
Используйте свой второй подход и определите DataTemplate
для предметов, а не с помощью DisplayMemberPath
имущество:
<ComboBox xmlns:o="clr-namespace:APP.GLN_Organisator.Objects">
<ComboBox.Resources>
<CollectionViewSource x:Key="ComboCollection"
Source="{Binding Path=mySelectedItem.Stammkinder}" />
<!-- Define a DataTemplate here -->
<DataTemplate DataType="{x:Type o:ChildPartner}">
<TextBlock Text="{Binding PartnerID}"/>
</DataTemplate>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="Ohne Stammnummer" Name="NoPID" />
<Separator />
<CollectionContainer Collection="{Binding Source={StaticResource ComboCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
С DataTemplate
, вы говорите WPF, как вы хотите отображать свои элементы. Если вы не предоставите DataTemplate
и не устанавливайте DisplayMemberPath
Значение свойства WPF возвращается к простому ToString()
позвоните для отображения ваших предметов. Вот почему вы видите эти строки типа вместо ваших предметов.