簡體   English   中英

更改WPF組合框顯示它的ItemsSource的方式

[英]Changing how a WPF ComboBox displays it's ItemsSource

我最近在這里問了一個導致以下代碼的問題:

<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 cmbTargetType的值設置ComboBox cmbTarget的ItemsSource。 當AllProductParts和AllMaterials的結果是一個字符串集合(在本例中為該集合中對象的名稱)時,此代碼可以完美地工作。 但是,我意識到我不希望這些結果成為字符串。 我想使用對象本身,以便可以將它們傳遞給附加的ViewModel對象。 但是,這自然會導致ComboBox僅顯示類名列表。

有沒有辦法讓此ComboBox顯示ProductPart / Material的InternalName變量,同時使其以實際ProductPart / Material對象的形式與其ViewModel進行通信?

我嘗試使用Converter類。 但是看來這些與程序的其余部分完全斷開了,這意味着我無法訪問代碼的其他部分來嘗試查找屬於InternalName的正確對象。

您在組合框元素內缺少DisplayMemberPath 將DisplayMemberPath設置為視圖模型屬性對象的字符串成員。

在這種情況下,您要將路徑設置為“ InternalName”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM