簡體   English   中英

將ComboBox項綁定到字符串

[英]Binding ComboBox item to string

我想將一個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>

Selected Item的類型為ComboBoxItem,它不接受String。 如果您想在其他地方顯示產品名稱,請嘗試以下方法:

 <TextBox Text="{Binding ElementName=my_ComboBox, Path=SelectedItem}"/>

只是一個建議。 您已經使用了SelectedItem的綁定,為什么不使用ItemsSource為Items設置另一個綁定? 因此,您不需要在視圖中靜態添加它們。

此外,您不必懷疑是否使用SelectedItem綁定處理ComboxItemString實例。 如果通過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}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM