将组合框项绑定到字符串
本文关键字:字符串 绑定 组合 | 更新日期: 2023-09-27 18:11:59
我想将ComboBox项绑定到字符串,但它不起作用。我的代码如下:
查看代码:
<ComboBox
SelectedValuePath="content"
SelectedItem="{Binding ProductName}"
......
<ComboBoxItem>1111111111</ComboBoxItem>
<ComboBoxItem>2222222222222</ComboBoxItem>
<ComboBoxItem>333333333333</ComboBoxItem>
</ComboBox>
视图模型中的代码:
private string _productName;
public string ProductName
{
get { return _productName; }
set
{
if (_productName != value)
{
_productName = value;
RaisePropertyChangedEvent("ProductName");
}
}
}
我假设您想从ComboboxItem而不是ComboboxItem本身获取文本。
所以你绑定了错误的信息。这应该可以工作。
<ComboBox
SelectedValuePath="content"
Text="{Binding ProductName}"
......
<ComboBoxItem>1111111111</ComboBoxItem>
<ComboBoxItem>2222222222222</ComboBoxItem>
<ComboBoxItem>333333333333</ComboBoxItem>
</ComboBox>
选择的项目类型是ComboBoxItem,它将不接受字符串。如果你想在其他地方显示产品名称可以试试这样:
<TextBox Text="{Binding ElementName=my_ComboBox, Path=SelectedItem}"/>
只是个建议。您已经为SelectedItem
使用了绑定,为什么不使用ItemsSource
为Items设置另一个绑定呢?因此,您不需要在视图中静态地添加它们。
此外,您将不必担心使用SelectedItem
绑定处理的是ComboxItem
还是String
的实例。在通过ItemsSource
绑定的情况下,可以确保SelectedItem
是一个字符串。
代码如下:
<ComboBox
SelectedValuePath="content"
SelectedItem="{Binding ProductName}"
ItemsSource="{Binding ProductNames}"
</ComboBox>
在视图模型(或后面的代码)中定义ProductNames
:
public String[] ProductNames
{
get
{
return _productNames;
}
set
{
if (_productNames!= value)
{
_productNames = value;
RaisePropertyChangedEvent("ProductNames");
}
}
}
String[] _productNames;
public NameOfConstructor()
{
List<String> productNames = new List<String>();
productNames.Add("A");
productNames.Add("B");
productNames.Add("C");
ProductNames = productNames.ToArray();
}
如果在执行过程中名称列表可能发生变化,我会使用ObservableCollection<string>
而不是String[]
。
应该是这样的
- 在View Model中创建一个Product的可观察集合。比如ProductCollection
- 按如下所示绑定到ComboBox ItemSource
<ComboBox Name="productComboBox" Width="200" Height="30" ItemsSource="{Binding ProductCollection}"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=ProductName}"></TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
如果你想在文本框中显示使用这个
<TextBox Text="{Binding ElementName=productComboBox, Path=SelectedItem}"/>