更改WPF ComboBox如何显示其ItemsSource

时间:2014-11-11 11:32:43

标签: c# wpf combobox

我最近在这里问了一个问题,结果是以下代码:

<ComboBox x:Name="cmbTarget" SelectedItem="{Binding TriggerTarget}" SelectionChanged="cmbTarget_SelectionChanged">
 <ComboBox.Style>
  <Style TargetType="{x:Type ComboBox}">
   <Style.Triggers>
    <DataTrigger Binding="{Binding Text, ElementName=cmbTargetType}" Value="Material">
     <Setter Property="ItemsSource" Value="{Binding DataContext.MaterialListViewModel.MaterialViewModels.AllMaterials, RelativeSource={RelativeSource AncestorType=Window}}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding Text, ElementName=cmbTargetType}" Value="ProductPart">
     <Setter Property="ItemsSource" Value="{Binding DataContext.ProductViewModel.ProductPartViewModels.AllProductParts, RelativeSource={RelativeSource AncestorType=Window}}" />
    </DataTrigger>
   </Style.Triggers>
  </Style>
 </ComboBox.Style>
</ComboBox>

简单地说,ComboBox cmbTarget的ItemsSource是根据ComboBox cmbTargetType的值设置的。此代码完美地工作,而AllProductParts和AllMaterials的结果是字符串的集合,在这种情况下,是集合中对象的名称。但是,我意识到我不希望这些结果成为一个字符串。我想使用对象本身,所以我可以将它们传递给我附加的ViewModel对象。但是,这自然会导致ComboBox只显示一个类名列表。

有没有办法让这个ComboBox显示ProductPart / Material的InternalName变量,同时让它以实际的ProductPart / Material对象的形式与它的ViewModel进行通信?

我尝试使用Converter类。但似乎这些与程序的其他部分完全断开,这意味着我无法访问代码的其他部分来尝试找到属于InternalName的正确对象。

1 个答案:

答案 0 :(得分:4)

您在组合框元素中缺少DisplayMemberPath。 将DisplayMemberPath设置为视图模型属性对象的字符串成员。

在这种情况下,您要将路径设置为&#34; InternalName&#34;