WPF ComboBox устанавливает выбранный элемент

#c# #wpf

#c# #wpf

Вопрос:

У меня есть поле со списком, в котором я привязываю свою модель. Я использую DataTemplate для отображения данных

 <ComboBox x:Name="comboBoxShift">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding ShiftId}" Visibility="Hidden"/>
                    <TextBlock Text="{Binding ShiftType}"/>                        
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
  

И свяжите его с comboBoxShift.ItemsSource = _db.Shifts.ToList(); , где _db находится контекст моей базы данных.

Из другого окна я прохожу ShiftId . Как я могу настроить отображение текущего элемента combobox ShiftType .

Комментарии:

1. Кроме того, вы можете установить DisplayMemberPath="ShiftType" вместо ItemTemplate, вы могли бы установить, SelectedValuePath="ShiftId" а затем назначить или привязать SelectedValue к выбранному идентификатору.

Ответ №1:

Я считаю, что ваш дизайн немного испорчен. Вам не нужно использовать шаблон данных для вашей цели, а просто установите DisplayMemeberPath .

XAML

 <ComboBox x:Name="comboBoxShift" DisplayMemberPath="ShiftType">
  

Затем для выбора из кода

 comboBoxShift.SelectedItem = My_Shift;
  

Примечание: Если вы хотите получить объект Shift из выбранного элемента combobox, вот как вы могли бы это сделать.

 Shift shift = (Shift)comboBoxShift.SelectedItem;
  

Ответ №2:

Поскольку вы скрываете один из текстовых блоков, это даст желаемый результат:

 <ComboBox x:Name="comboBoxShift" DisplayMemberPath="ShiftType">

</ComboBox>