2012-11-14 41 views
7

Tôi có một ComboBox có một danh sách ComboBox.Items đã khai báo (nói cách khác, không bị ràng buộc động qua ItemsSource). Tôi sử dụng ComboBoxItem.Content cho tên hiển thị và ComboBoxItem.Tag cho Id tương ứng như hình dưới đây.WPF MVVM ComboBox Tag Selection

Làm cách nào để lấy Thẻ của mục đã chọn trả lại chứ không phải nội dung? Tôi đã thử SelectedItemValuePath="Tag", nhưng điều đó không hoạt động.

<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> 

Trả lời

8

Nếu bạn có tài sản này trong lớp ViewModel của bạn:

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

Tất nhiên bạn có thể có tài sản của kiểu int và nó sẽ được làm việc quá.

Hãy thử điều này ràng buộc:

<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

Hoàn hảo! Cảm ơn một nhóm! – NickV

+0

Bạn được chào đón :) – kmatyaszek

0

Cho combobox một tên "x: Name = "abcComboBox" và sau đó ở bên cạnh đang chuỗi tag = (abcComboBox.SelectedItem như ComboBoxItem) .Tag.ToString() ;