好的,我已经搜出了Interwebs的内容,似乎无法找到这个权利。 我有一个ComboBox绑定到EntityFramework实体的CollectionViewSource。 显示屏是显示名/姓的模板。 问题是,当选择一个项目时,组合框的显示== object.ToString()(即MyCompany.Data.Professional)而不是有用的东西。
我确定我在这里错过了一处房产。 ri是UserControl,而SelectedPhysician是
的DependencyProperty。<ComboBox Grid.Column="1" Grid.Row="4" x:Name="cmbReferringPhys"
IsEditable="{Binding IsReadOnly}"
ItemsSource="{Binding Source={StaticResource ProfessionalLookup}}"
SelectedItem="{Binding ElementName=ri, Path=SelectedPhysian, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}"
HorizontalAlignment="Left" VerticalAlignment="Top" Height="19.277" Width="300"
IsSynchronizedWithCurrentItem="True"
SelectionChanged="ReferringPhy_SelectionChanged" TabIndex="4">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="120" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding FirstName}" Grid.Column="0" Margin="4,0" />
<TextBlock Text="{Binding LastName}" Grid.Column="1" Margin="4,0"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
答案 0 :(得分:5)
您可以使用转换器(tutorial),但这可能会过度使用它。我建议使用ComboBox的DisplayMemberPath属性。
要使用转换器,您需要创建一个转换器类(实现IValueConverter的转换器类。)您的代码将如下所示:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MyCompany.Data.Professional prof = (MyCompany.Data.Professional)value;
if (prof == null)
{
return string.Empty;
}
else
{
return string.Format("{0} {1}", prof.First, prof.Last); //or however you want to format this
}
}
// If you'll ever need to convert back from a string to a Professional,
// implement that logic here
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
在XAML中,你会做这样的事情:
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource [ConverterClassName]}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
编辑编辑:在这种情况下,我认为您不需要使用ConvertBack,因为您可以通过将ComboBox.SelectedItem强制转换为Professional来获取所选对象。