将组合框项绑定到字符串

本文关键字:字符串 绑定 组合 | 更新日期: 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[]

应该是这样的

  1. 在View Model中创建一个Product的可观察集合。比如ProductCollection
  2. 按如下所示绑定到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}"/>