Отобразите Значение по умолчанию для Связанного с данными WPF ComboBox

У меня есть связанный с данными WPF comboxbox, где я использую SelectedValuePath свойство для выбора выбранного значения на основе чего-то другого, чем текст объекта. Это, вероятно, лучше всего объяснено с примером:

<ComboBox ItemsSource="{Binding Path=Items}"
          DisplayMemberPath="Name"
          SelectedValuePath="Id"
          SelectedValue="{Binding Path=SelectedItemId}"/>

datacontext для этой вещи похож на это:

DataContext = new MyDataContext
{
    Items = {
        new DataItem{ Name = "Jim", Id = 1 },
        new DataItem{ Name = "Bob", Id = 2 },
    },
    SelectedItemId = -1,
};

Это - все хорошо и хороший, когда я отображаю предварительно заполненные данные, где SelectedItemId совпадает с допустимым Item.Id.

Проблема, в новом случае объекта, где SelectedItemId неизвестно. То, что делает WPF, показывают поле комбинированного списка пробелом. Я не хочу это. Я хочу запретить пропуски в анкете в поле комбинированного списка; я хотел бы, чтобы это отобразило первый объект в списке.

Действительно ли это возможно? Я мог написать некоторый код, чтобы явно пойти и установить SelectedItemId заранее, но это не кажется правильным для изменения моей модели данных из-за недостатка в UI.

22
задан Orion Edwards 15 December 2009 в 22:30
поделиться

1 ответ

Я думаю, вам придется поработать вручную, чтобы добиться такого поведения. Вы можете проверить код позади при первом отображении ComboBox, совпадает ли SelectedItemId или нет, а затем изменить выбранный индекс на основе этого. Или, если вы знаете, что SelectedItemId всегда будет -1, когда нет соответствующего элемента, вы можете использовать триггер данных.

Метод 1:

if (!DataContext.Items.Exists(l => l.Id == DataContext.SelectedItemId))
{
    MyComboBox.SelectedIndex = 0;  //this selects the first item in the list
}

Метод 2:

<Style TargetType="ComboBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=SelectedItemId}" Value="-1">
            <Setter Property="SelectedIndex" Value="0"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
9
ответ дан 29 November 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: