【发布时间】:2015-01-07 22:48:50
【问题描述】:
我有一个带有组合框的 WPF 项目,我试图将其绑定到 ComboboxItem 对象列表。 ComboboxItem 是我为示例项目创建的一个类。这部分工作......我的三个项目可用于组合框,但显示的值为空白,combobox.SelectedValue 的值为空。我看过几篇关于如何做到这一点的 stackoverflow 文章和其他博客文章。据我所知,我做对了。但显然我做错了什么。这是一个测试项目的源代码...
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 创建属性,而不是将它们作为公共成员
-
你为什么要在你的代码中做你的数据绑定,当你可以做得更干净的时候in your xaml?
-
这只是一个测试项目。我尝试了多次使用 XAML 和代码隐藏的迭代,同时试图找出我做错了什么。原来它一直是 ComboboxItem 类。 ://