2015-09-10 22 views
5

Desidero associare un elemento ComboBox a una stringa, ma non funziona. Il mio codice è sottoAssociazione elemento ComboBox a stringa

Codice in vista:

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

Codice in vista del modello:

private string _productName; 
public string ProductName 
{ 
    get { return _productName; } 
    set 
    { 
     if (_productName != value) 
     { 
      _productName = value; 
      RaisePropertyChangedEvent("ProductName"); 
     } 
    } 
} 
+1

Il tuo codice funziona bene, non hai dimenticato di impostare DataContext, vero? – Usama

+0

Sì, ho impostato DataContext. Il collegamento stringa a stringa funziona correttamente, ma questo collegamento Combobox non funziona. – YYang

risposta

2

suppongo che si desidera ottenere il testo dal ComboboxItem e non il ComboBoxItem iteself.

Quindi si sta vincolando l'informazione sbagliata. Questo dovrebbe funzionare.

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

L'elemento selezionato è di tipo ComboBoxItem, non accetta String. Se si desidera visualizzare il nome del prodotto in qualche altro posto provare forse qualcosa di simile:

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

Solo un suggerimento. Utilizzi già una rilegatura per lo SelectedItem, perché non imposti un'altra rilegatura per gli articoli usando lo ItemsSource? Quindi non avresti bisogno di aggiungerli staticamente nella tua vista.

Inoltre non avreste il problema di chiedervi se avete a che fare con istanze di ComboxItem o String con il vostro legame SelectedItem. In caso di associazione via ItemsSource si può essere sicuri che lo SelectedItem è una stringa.

Ecco il codice:

<ComboBox   
SelectedValuePath="content" 
SelectedItem="{Binding ProductName}" 
ItemsSource="{Binding ProductNames}" 
</ComboBox> 

nel modello visualizzazione (o codice dietro) si definisce il 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(); 
} 

Se fosse possibile che l'elenco dei nomi di modifiche durante l'esecuzione, Vorrei usare uno ObservableCollection<string> invece String[].

0

dovrebbe essere come questo

  1. creare una collezione osservabile di prodotto in vista del modello. Diciamo ProductCollection
  2. legarsi al ComboBox ItemSource come indicato di seguito
<ComboBox Name="productComboBox" Width="200" Height="30" ItemsSource="{Binding ProductCollection}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=ProductName}"></TextBlock> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 

se si desidera mostrare nel testo da qualche parte uso questo

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