У меня есть 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.Address

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

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

0
SideSky 14 Окт 2020 в 10:08

1 ответ

Лучший ответ

Если вы хотите получить выбранный элемент, откройте его с помощью свойства SelectedItem на 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_;
1
thatguy 14 Окт 2020 в 07:30