[英]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.