#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_;