将文本绑定到组合框中的选定项目

时间:2014-04-22 14:42:43

标签: c# wpf xaml data-binding combobox

我在数据库上有一个文本字段,但现在我不希望它是一个免费的开放字段,我想将其限制为:让我们说A,B和C.

为此,我想使用一个Combobox。

问题:如果在XAML中定义组合框的项目,如何将所选项目绑定到字符串属性?

XAML:

 <ComboBox SelectedValue="{Binding Path=MyProperty}"> <!-- Not working-->
   <ComboBoxItem>A</ComboBoxItem>
   <ComboBoxItem>B</ComboBoxItem>
   <ComboBoxItem>C</ComboBoxItem>
 </ComboBox>

类别:

public Class MyClass:INotifyPropertyChanged
{
private string myProperty;
public string MyProperty
{
 get{return myProperty;}
 set{
      myProperty=value;
      OnPropertyChanged("MyProperty");
    }
 }
}

因此,用户将更改所选项目,并且将在数据绑定对象上更新新值。

编辑: 由于评论和答案,我部分解决了问题,唯一的问题是程序启动时组合框选择是空的。我这样解决了:

<ComboBox SelectedValuePath="Content">
 <ComboBoxItem>A</ComboBoxItem>
 <ComboBoxItem>B</ComboBoxItem>
 <ComboBoxItem>C</ComboBoxItem>
  <ComboBox.SelectedValue>
   <Binding Path="MyProperty" Mode="TwoWay"/>
  </ComboBox.SelectedValue>
 </ComboBox>

我将选定的值部分移出了Combobox的属性,并使用了属性元素sintax,这确保了在使用之前定义了集合。

2 个答案:

答案 0 :(得分:6)

Wpf ComboBox有三个选择属性和一个显示属性:

  • SelectedItem
  • SelectedValue
  • SelectedValuePath
  • DisplayMemberPath

使用SelectedValue时,您还应设置SelectedValuePath(几乎总是)。了解您的案例中的Items包含ItemCollectionComboBoxItem个对象的序列,就像任何其他对象一样,您必须指定SelectedValuePath(读取属性)想绑定;在这种情况下,您想要访问ComboBoxItem.Content属性(http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.content(v=vs.110).aspx)。

<ComboBox SelectedValue="{Binding Path=MyProperty}" SelectedValuePath="Content">
  <ComboBoxItem>A</ComboBoxItem>
  <ComboBoxItem>B</ComboBoxItem>
  <ComboBoxItem>C</ComboBoxItem>
</ComboBox>

现在,您使用所选项目的SelctedValue属性将MyProperty绑定到Content属性,该属性恰好是您要查找的字符串。

答案 1 :(得分:0)

我不喜欢硬编码组合框项目。在这种情况下如此简单,我有一个类型的列表到组合框的itemsource。如果它比字符串列表更复杂,我会在您的数据库中创建一个查找表并使用它。对于String列表路由,它将类似于:

    public List<String> LetterTypes { get; set; }
    public String SelectedLetterType { get; set; }

int ctor:

    LetterTypes = new List<String> { A, B, C }

然后在你的视图中:

    <ComboBox ItemsSource="{Binding LetterTypes}" SelectedItem="{Binding SelectedLetterType}" />

我发现你已经找到了解决问题的方法但可能是为了将来参考,这可能是填充组合框的另一种方法。