WPF получает выбранное значение со списком, которое привязано к observablecollection

#c# #wpf #class #combobox #observablecollection

#c# #wpf #класс #со списком #observablecollection

Вопрос:

У меня есть ComboBox (CBaddress), который привязан к ObservableCollection .

XAML

 <ComboBox
   x:Name="CBaddress"
   Height="23"
   Margin="80,75,423,0"
   VerticalAlignment="Top" 
   ItemTemplate="{StaticResource AddressTemplate}"
   ItemsSource="{Binding}"
/>

<DataTemplate x:Key="AddressTemplate">
   <StackPanel Orientation="Horizontal">
      <TextBlock Width="50" Text="{Binding Path=ID_}" />
      <TextBlock Width="100" Text="{Binding Path=Address_}" />
      <TextBlock Width="30" Text="{Binding Path=HouseNumber_}" />
      <TextBlock Width="40" Text="{Binding Path=PostalCode_}" />
      <TextBlock Width="150" Text="{Binding Path=State_}" />
   </StackPanel>
</DataTemplate>
  

ObservableCollection Состоит из class (адреса).

 class Address
{
   public int ID_ { get; set; }
   public string Country_ { get; set; }
   public string State_ { get; set; }
   public int PostalCode_ { get; set; }
   public string Address_ { get; set; }
   public int HouseNumber_ { get; set; }
}
  

Когда моя программа запускается, она загружает все значения из базы данных и может отображать все значения в ComboBox :

 CBaddress.DataContext = database.SelectAllAddresses();
  

Но как мне получить значения? С CBaddress.Text помощью я получаю только этот вывод :

MySQL_WPF.classes.Адрес

Возможно ли получить обычный текст, который также отображается в ComboBox ?

Было бы лучше, если бы я мог получить определенное значение из выбранного значения, например ID_ .

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

1. Какое свойство должно отображаться в ComboBox ? Что вы подразумеваете под «как мне получить значения?»? Какие значения вы хотите получить, выбранный элемент, все элементы?

2. свойства, которые отображаются в табличке данных XAML, и все в порядке. Мой вопрос был в том, как я могу работать с выбранным значением. Например, возможно ли получить только ID_ выбранного значения

Ответ №1:

Если вы хотите получить выбранный элемент, обратитесь к нему с SelectedItem помощью свойства on ComboBox .

 var selectedID = ((Address)CBaddress.SelectedItem).ID_ ;
  

SelectedItem Свойство имеет тип object , поэтому вам нужно привести его к вашему типу данных Address . Затем вы можете получить доступ к любому из его свойств, как обычно.

Если вы работаете в сценарии MVVM, вы должны привязать SelectedItem его к свойству в вашей модели представления, например SelectedAddress .

 <ComboBox ...
          ItemsSource="{Binding}"
          SelectedItem={Binding SelectedAddress}"/>
  
 private Address _selectedAddress;
public Address SelectedAddress
{
   get => _selectedAddress;
   set
   {
      if (_selectedAddress == value)
         return;

      _selectedAddress = value;
      OnPropertyChanged();
   }
}
  

Затем вы можете получить доступ к любому свойству таким же образом, например:

 var selectedID = SelectedAddress.ID_;