我在数据库上有一个文本字段,但现在我不希望它是一个免费的开放字段,我想将其限制为:让我们说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,这确保了在使用之前定义了集合。
答案 0 :(得分:6)
Wpf ComboBox
有三个选择属性和一个显示属性:
SelectedItem
SelectedValue
SelectedValuePath
DisplayMemberPath
使用SelectedValue
时,您还应设置SelectedValuePath
(几乎总是)。了解您的案例中的Items
包含ItemCollection
个ComboBoxItem
个对象的序列,就像任何其他对象一样,您必须指定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}" />
我发现你已经找到了解决问题的方法但可能是为了将来参考,这可能是填充组合框的另一种方法。