[英]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.