我的项目中有以下ComboBox
,但有一点让我非常困扰,如果我这样写的话:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Content="Candidate" Margin="3" Foreground="White" Grid.Column="0"/>
<ComboBox ItemsSource="{Binding CandidateList, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Candidate, UpdateSourceTrigger=PropertyChanged}"
IsEditable="True" Margin="3" Grid.Column="1">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName"/>
<Binding Path="SecondName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
因此,展开版本中的名称格式正确,但在ComboBox
本身显示它不正确...
是否有可能在xaml中完成这项工作?
答案 0 :(得分:2)
之前已经问过这个问题。
WPF IsEditable=true ComboBox filled with objects displays the ToString() as the selected item
WPF Combobox: Different template in textbox and drop-downlist
您可以向数据对象添加一个属性,该属性返回全名,并将ComboBox的TextSearch.TextPath属性设置为此属性,或尝试修改ComboBoxItem容器的ControlTemplate。请查看以上链接以获取更多信息。
答案 1 :(得分:0)
只是一个想法,但你可以解决这个问题,并且当你想要显示它时,通过添加一个带有getter的DisplayName属性(需要将OnPropertyChanged(“DisplayName”)添加到你的First /中)来消除对未来转换器的需求第二个名称设置者),或通过覆盖候选类的ToString()方法。基本上 -
Override ToString()
{
return FirstName + " " + SecondName ;
}
实际上我不确定如果更改值,OnPropertyChanged是否会触发它:/