2015-09-10 18 views
5

ComboBoxアイテムを文字列にバインドしたいが、機能しません。私のコードは以下の通りです。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を設定することを忘れていませんでしたか? – Usama

+0

はい私はDataContextを設定しました。文字列から文字列へのバインディングは正常に機能しますが、このコンボボックスのバインディングは機能しません。 – YYang

答えて

2

私はあなたがComboboxItemなくComboBoxItem iteselfからテキストを取得したいと仮定します。

あなたは間違った情報をバインドしています。これはうまくいくはずです。

<ComboBox   
SelectedValuePath="content" 
Text="{Binding ProductName}" 
      ......      
<ComboBoxItem>1111111111</ComboBoxItem> 
<ComboBoxItem>2222222222222</ComboBoxItem> 
<ComboBoxItem>333333333333</ComboBoxItem> 
</ComboBox> 
1

選択項目はComboBoxItem型であり、Stringを受け入れません。 あなたには、いくつかの他の場所では製品名を表示したい場合は、このようなものかもしれないしてみてください:

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

だけの提案。 SelectedItemのバインディングはすでに使用していますが、ItemsSourceを使用しているアイテムに別のバインディングを設定してください。したがって、ビューに静的に追加する必要はありません。

またはStringのインスタンスをあなたのSelectedItemバインディングで処理するかどうか不思議に思うことはありません。 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(); 
} 

名前のリストは、実行時に変更することが可能であった場合には、私はString[]の代わりにObservableCollection<string>を使用します。

0

これは、ビューモデルに製品の監視可能なコレクションを作成し、この

  1. ようにする必要があります。あなたはどこか テキストボックスに表示したい場合
<ComboBox Name="productComboBox" Width="200" Height="30" ItemsSource="{Binding ProductCollection}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=ProductName}"></TextBlock> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 

以下に示すようComboBoxのItemSourceに言うProductCollection

  • バインドは、あなたのコードは正常に動作します。この

    <TextBox Text="{Binding ElementName=productComboBox, Path=SelectedItem}"/> 
    
  • 関連する問題