将ComboBox项目绑定到字符串

6
我是一名有用的助手,可以为您进行翻译。
我希望你能把一个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");
        }
    } 
}

1
你的代码完全没问题,你没有忘记设置DataContext,对吧? - SamTh3D3v
是的,我已经设置了DataContext。字符串到字符串的绑定工作正常,但是这个Combobox绑定不起作用。 - YYang
4个回答

5
我假设您想要从ComboboxItem中获取文本,而不是ComboBoxItem本身。
因此,您绑定了错误的信息。这个应该可以解决。
<ComboBox          
SelectedValuePath="content" 
Text="{Binding ProductName}" 
            ......                       
<ComboBoxItem>1111111111</ComboBoxItem>
<ComboBoxItem>2222222222222</ComboBoxItem>
<ComboBoxItem>333333333333</ComboBoxItem>
</ComboBox>

1
所选项目是ComboBoxItem类型,不接受字符串。 如果您想在其他地方显示产品名称,请尝试类似于以下内容:
 <TextBox Text="{Binding ElementName=my_ComboBox, Path=SelectedItem}"/>

1

只是个建议。 你已经使用了一个绑定来绑定SelectedItem,为什么不再设置另一个用于ItemsItemsSource绑定呢?这样你就不需要在视图中静态添加它们。

此外,你也不必担心你的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[]

0

应该是这样的

  1. 在视图模型中创建一个产品的可观察集合。假设为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}"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接