繁体   English   中英

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

[英]Bind text to selected item in combobox

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

为此,我想使用组合框。

问题:鉴于组合框的项目是在 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,这确保了在使用之前定义了集合。

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

  • SelectedItem
  • SelectedValue
  • SelectedValuePath
  • DisplayMemberPath

使用SelectedValue您还应该设置SelectedValuePath (几乎总是)。 了解您案例中的Items包含ComboBoxItem对象的序列( ItemCollection ),并且就像任何其他对象一样,您必须指定要绑定到的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>

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

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

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

国际贸易商:

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

然后在您的视图中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM