2012-11-14 18 views
7

Ho un ComboBox che ha un elenco ComboBox.Items dichiarato (in altre parole, non associato dinamicamente tramite ItemsSource). Io uso il ComboBoxItem.Content per il nome visualizzato e ComboBoxItem.Tag per l'ID corrispondente come mostrato di seguito.Selezione tag ComboBox WPF MVVM

Come si ottiene il tag dell'elemento selezionato restituito e non il contenuto? Ho provato SelectedItemValuePath="Tag", ma non funziona.

<ComboBox Visibility="{Binding Path=ShowOutpatientFields, Converter= 
     {StaticResource 
      boolTovisConverter}}" Grid.Row="5" Grid.Column="2" Margin="0,2,0,2" 
     Text="{Binding Path=NewCase.ServiceType, ValidatesOnDataErrors=true, 
     NotifyOnValidationError=true}" SelectedValuePath="Tag"> 
      <ComboBox.Items> 
      <ComboBoxItem Content="Hospice" Tag="33" /> 
      <ComboBoxItem Content="Hospital Outpatient" Tag="36" /> 
      <ComboBoxItem Content="Hospital Inpatient Extension" Tag="128" /> 
      <ComboBoxItem Content="Maternity" Tag="52" /> 
      </ComboBox.Items> 
    </ComboBox> 

risposta

8

Se si dispone di questa proprietà nella classe ViewModel:

private string _serviceType; 
public string ServiceType 
{ 
    get { return _serviceType; } 
    set { _serviceType = value; } 
} 

Naturalmente si può avere proprietà di tipo int e sarà lavorare troppo.

Prova questo legame:

<ComboBox VerticalAlignment="Center" Margin="0,2,0,2" 
       SelectedValue="{Binding ServiceType}" 
       SelectedValuePath="Tag"> 
      <ComboBox.Items> 
       <ComboBoxItem Content="Hospice" Tag="33" /> 
       <ComboBoxItem Content="Hospital Outpatient" Tag="36" /> 
       <ComboBoxItem Content="Hospital Inpatient Extension" Tag="128" /> 
       <ComboBoxItem Content="Maternity" Tag="52" /> 
      </ComboBox.Items> 
     </ComboBox> 
+1

Perfetto! Grazie mille! – NickV

+0

Prego :) – kmatyaszek

0

Dare un nome casella combinata "x: Name = "abcComboBox" e poi a fianco del codice tag stringa = (abcComboBox.SelectedItem come ComboBoxItem) .Tag.ToString() ;