/ / Зв'язаний з даними WPF ComboBox не відображає вибране значення - c #, wpf

Зв'язаний з даними WPF ComboBox не відображає вибране значення - c #, wpf

У мене є ComboBox, прив’язаний до DataTable. ComboBox відображає список значень, витягнутих із стовпця "wellId" DataTable. ComboBox також стилізований так, що я можу вставити користувальницький елемент у список, просто додавши фіктивний рядок у таблицю даних з полем wellId, встановленим на "(налаштування)".

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Content" Value="{Binding wellId}" />
<Style.Triggers>
<DataTrigger Binding="{Binding wellId}" Value="(settings)">
<Setter Property="Content" Value="Customize..." />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>

Здебільшого це чудово працює. Він показує список, а всі елементи (включаючи фіктивні елементи) вибираються у спадному списку.

Однак, вибравши елемент зі списку,незалежно від того, чи це справжній предмет, чи манекен, ComboBox не відображає вибраний елемент належним чином. Замість того, щоб показувати те саме значення, яке відображається у спадному списку (стовпець "wellId" з DataTable), він замість цього просто відображає рядок "System.Data.DataRowViewНезалежно від того, що я обрав, він завжди відображає те саме.

Якщо я спеціально ввімкнув DisplayMemberPathComboBox до "wellId", тоді він відображає вибраний елемент належним чином. Однак це змінює всі інші стилі, які я застосував, в результаті чого спадний список заповнюється порожніми записами.

Як змусити ComboBox правильно відображати вибраний елемент?

Відповіді:

1 для відповіді № 1

Змініть свій ComboBox, щоб встановити ItemTemplate замість ItemContainerStyle, і видалити IsEditable=True. Якщо IsEditable=True потім SelectedItem відображатиметься в TextBox, і якщо TextBox.Text прив’язаний до елемента, він відобразить .ToString() цього пункту

<ComboBox Name="comboWell" ItemsSource="{Binding }">
<ComboBox.ItemTemplate>
<DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Content" Value="{Binding wellId}" />
<Style.Triggers>
<DataTrigger Binding="{Binding wellId}" Value="(settings)">
<Setter Property="Content" Value="Customize..." />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>