У меня есть проект WPF со списком, который я пытаюсь привязать к списку объектов ComboboxItem
. ComboboxItem
- это класс, который я создал для своего образца проекта. Это частично работает ... У меня есть три элемента, доступных для combobox, но отображаемое значение пустое, а значение combobox.SelectedValue
равно null. Я видел несколько сообщений stackoverflow и других сообщений в блоге о том, как это сделать. И насколько я могу судить, я делаю это правильно. Но, очевидно, я делаю что-то неправильно. Вот исходный код для тестового проекта ...WPF - Bind combobox to Список пользовательских объектов класса
XAML:
<Window x:Class="WpfTestApp_ComboBoxes.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ComboBox x:Name="cboMyCombo" Grid.Row="0"
SelectionChanged="cboMyCombo_SelectionChanged"></ComboBox>
</Grid>
</Window>
C# кода:
public partial class MainWindow : Window
{
List<ComboboxItem> _list = new List<ComboboxItem>();
public MainWindow()
{
_list.Add(new ComboboxItem() { DisplayValue = "One", InternalValue = "1" });
_list.Add(new ComboboxItem() { DisplayValue = "Two", InternalValue = "2" });
_list.Add(new ComboboxItem() { DisplayValue = "Three", InternalValue = "3" });
InitializeComponent();
}
private void cboMyCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
ComboBox cb = sender as ComboBox;
MessageBox.Show(string.Format("Selected Item: {0}, Selected Value: {1}", cb.SelectedItem, cb.SelectedValue));
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
cboMyCombo.ItemsSource = _list;
cboMyCombo.DisplayMemberPath = "DisplayValue";
cboMyCombo.SelectedValuePath = "InternalValue";
}
}
ComboBoxItem Класс:
public class ComboboxItem
{
public string DisplayValue;
public string InternalValue;
}
Создание свойств DisplayValue и InternalValue вместо того, чтобы их как открытые члены – user469104
Почему вы делаете ваши привязки данных в коде позади, когда вы можете сделать это гораздо чище [в вашем XAML] (HTTP: //msdn.microsoft.com/en-us/library/ms752347(v=vs.110).aspx)? – BCdotWEB
Это всего лишь тестовый проект. Я пробовал много итераций использования XAML и кода, пытаясь понять, что я делаю неправильно. Оказывается, это был класс ComboboxItem. :/ – DeadZone