将ComboBox的Selected Item / Text设置为ItemsSource的Value路径

时间:2017-02-28 11:56:56

标签: c# wpf entity-framework mvvm

我有一个实体表,列出了ISO国家代码及其描述,以便填充ComboBox。然后,我有另一张表,其中设置了一个国籍'到ComboBox的选定值。我在IsoCountryCodes和我的其他表之间没有外键约束。

我希望能够将ComboBox的SelectedItem设置为选定的IsoCountryCode,但我想将SelectedValue保存到'国籍'领域。

我已经尝试将ComboBox的SelectedItem设置为我的国籍' (字符串)字段,但它只是在IsoCountryCode上执行ToString()。当我设置'文字'字段而不是SelectedItem,它将DisplayPath值保存到'国籍'字段。

我想知道是否有办法让ValuePath值保存到没有任何外键约束的字段,同时仍向用户显示有效的DisplayPath?

IsoCountryCode表的示例:

IsoCode     IsoDescription

'GBR'      'United Kingdom'
'USA'      'United States of America'

另一个表的示例:

PassengerId  PassengerName  PassengerNationality   PassengerDocumentIssuingCountry
1            'Carter, John'   'GBR'                'USA'

我目前的Xaml:

<xctk:WatermarkComboBox x:Name="uxNationalityCmbo" Margin="0,0,5,5" Watermark="Nationality" 
      Grid.Row="2" ItemsSource="{Binding CountryCodeCollection}" SelectedValuePath="IsoCode" DisplayMemberPath="IsoDescription" 
      IsTextSearchEnabled="True" Text="{Binding SelectedPassenger.PassengerNationality, TargetNullValue=''}"/>

现在更改所选值将使USA将实体PassengerNationality更改为“United States of America”,而我需要&#39; USA&#39;

1 个答案:

答案 0 :(得分:1)

您应该将SelectedValue属性绑定到PassengerNationality源属性:

<xctk:WatermarkComboBox x:Name="uxNationalityCmbo" Margin="0,0,5,5" Watermark="Nationality" 
  Grid.Row="2" ItemsSource="{Binding CountryCodeCollection}" SelectedValuePath="IsoCode" DisplayMemberPath="IsoDescription" 
  IsTextSearchEnabled="True" SelectedValue="{Binding SelectedPassenger.PassengerNationality, TargetNullValue=''}"/>