WPFcombobox值和显示文本

我习惯这样做

State.Items.Add(new ListItem { Text = "SomeState", Value = NumericIDofState }); 

State是ASP.NET中的列表框。

如何使用WPF ComboBox实现相同的目标? 我确实在ComboBoxItem对象中看到了一个名为“Content”的属性,但是如何为每个项目分配除显示给用户之外的值? 请帮忙。

请参阅组合的这些属性:

  • 的DisplayMemberPath
  • SelectedValuePath

WPF Combobox有:

  • SelectedValuePath属性,指定用于确定SelectedValue属性值的属性的路径。 它类似于ASP.NET ListItemValue属性。
  • DisplayMemberPath属性,用于定义描述如何显示数据对象的默认模板。 它类似于ASP.NET ListItemText属性。

假设您希望Combobox显示以下KeyValuePair对象的集合:

 private static readonly KeyValuePair[] tripLengthList = { new KeyValuePair(0, "0"), new KeyValuePair(30, "30"), new KeyValuePair(50, "50"), new KeyValuePair(100, "100"), }; 

您在视图模型中定义一个返回该集合的属性:

 public KeyValuePair[] TripLengthList { get { return tripLengthList; } } 

然后,你的Combobox的XAML将是:

  

SelectedValuePathDisplayMemberPath属性设置为Combobox显示的对象的所需属性名称( KeyValue )。

或者,如果您真的想在代码后面添加项目到Combobox而不是使用绑定,您也可以这样做。 例如:

   // Code behind public partial class FilterView : UserControl { public FilterView() { this.InitializeComponent(); this.ComboBoxFrom.SelectedValuePath = "Key"; this.ComboBoxFrom.DisplayMemberPath = "Value"; this.ComboBoxFrom.Items.Add(new KeyValuePair(0, "0")); this.ComboBoxFrom.Items.Add(new KeyValuePair(30, "30")); this.ComboBoxFrom.Items.Add(new KeyValuePair(50, "50")); this.ComboBoxFrom.Items.Add(new KeyValuePair(100, "100")); } 

如果您只想在viewmodel中公开一个简单的属性并处理视图中选项的文本,您可以执行如下简单的解决方案:

       

bool属性的示例:

      

类型 – 详细替代(原始示例)

下面是明确声明类型的更详细的替代方案。 根据您的喜好风格(或某些需要它的类型),也许它更适合您。

    0     1     2    

bool属性的示例:

    False     True    

sys命名空间声明为:

 xmlns:sys="clr-namespace:System;assembly=mscorlib" 

如果跳过Value,那么我认为在运行时将新项添加到ComboBox中非常简单。

 comboBox1.Items.Add("SomeText"); comboBox1.SelectedIndex = comboBox1.Items.Count - 1; 

SelectedIndex属性设置为Items.Count-1以便新添加的项目作为选定项目显示在ComboBox中。