Arli Chokoev (Choke) Ответов: 1

Wpf combobox никогда не показывает текст selecteditem


WPF ComboBox никогда не обновляет текст до SelectedItemоднако это его собственность SelectedItem изменения по выбору.

код XAML:
<ComboBox  Margin="4 0 2 0"

           ItemsSource="{Binding XAxes}"

           SelectedItem="{Binding SelectedXAxis, Mode=TwoWay}"

           ItemTemplate="{StaticResource AxisCBTextTemplate}"/>

Шаблон есть:
<DataTemplate x:Key="AxisCBTextTemplate">
    <TextBlock Text="{Binding AxisTitle}"/>
</DataTemplate>


ВИРТУАЛЬНАЯ ПАМЯТЬ:
private AxisCollection _xAxes;
public AxisCollection XAxes
{
    get => _xAxes;
    private set
    {
        _xAxes = value;
        OnPropertyChanged("XAxes");
    }
}

private IAxis _selectedXAxis;
public IAxis SelectedXAxis
{
    get => _selectedXAxis;
    set
    {
        _selectedXAxis = value;
        OnPropertyChanged(nameof(SelectedXAxis));
    }
}

SelectedXAxis сеттер получает вызов, а также OnPropertyChanged, но ComboBox не показывает никакого текста. Список отображается по назначению, нет AxisTitle потерян.

Что я уже пробовал:

Меняющийся ItemTemplate к DisplayMemberPath и SelectedValuePath:

<ComboBox  Margin="4 0 2 0"

    ItemsSource="{Binding YAxes}"

    SelectedItem="{Binding SelectedYAxis, Mode=TwoWay}"

    DisplayMemberPath="AxisTitle"

    SelectedValuePath="AxisTitle"/>


Добавление OnPropertyChanged("AxisTitle") к коду виртуальной машины;
Различные комбинации ItemTemplate, DisplayMemberPath и SelectedValuePath;
Оставив только
<ComboBox  Margin="4 0 2 0"

    ItemsSource="{Binding YAxes}"/>
вызывает исключение.

Richard Deeming

Проверьте окно вывода в Visual Studio, чтобы узнать, есть ли какие-либо ошибки привязки данных.
Отладка Привязок данных - полный учебник по WPF[^]

Arli Chokoev (Choke)

Но их нет.

Gerry Schmitz

Реализовали ли вы INotifyPropertyChanged? Вы установили DataContext?

Arli Chokoev (Choke)

Да и еще раз да. Как уже было сказано, сеттер для SelectedItem срабатывает, как и OnPropertyChanged, но текст ComboBox не меняется.

1 Ответов

Рейтинг:
2

#realJSOP

В вашем XAML для combobox попробуйте добавить IsSynchronizedWithCurrentItem="True".

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