我有当前的Combo Box XAML:
<ComboBox Height="23" HorizontalAlignment="Left" ItemsSource="{Binding ElementName=showDomainDataSource, Path=Data}" Margin="583,8,0,0" x:Name="showsComboBox" VerticalAlignment="Top" Width="233" SelectionChanged="showsComboBox_SelectionChanged" IsSynchronizedWithCurrentItem="False">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=showName, Converter={StaticResource distinctConverter}}" x:Name="showsComboxshowName" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
我有课 - DistinctConverter:
public class DistinctConverter : IValueConverter
{
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
var values = value as IEnumerable;
if (values == null)
return null;
return values.Cast<object>().Distinct();
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
我已将以下内容添加到我的资源中:
<convert:DistinctConverter x:Key="distinctConverter" />
问题是,我在组合框中收到错误:
任何人都可以帮助我解决我在这里做错的事。
答案 0 :(得分:2)
问题是模型中的showName
属性返回了一个要绑定到Text
的{{1}}属性的集合,该属性是一个字符串。然后你有一个转换器,它将一个集合作为输入,在其上运行LINQ查询,返回另一个集合。 该值(整个集合)通过绑定转换为使用TextBox
的字符串,并在组合框中显示为单个条目。然后对组合框中的每个项重复该过程。
如果不确切知道自己要完成什么,很难确切地说明如何解决这个问题。例如,如果ToString
等于:
showName
您希望这出现在组合框行吗?
比尔迈克特德
如果是这样,那么您可以在使用string[] { "Bill", "Bill", "Mike", "Ted" };
后使用Aggregate
。
但听起来你更希望Bill,Mike和Ted在组合框中显示为单独的项目。在这种情况下,您需要将转换器应用于Distinct
本身的ItemsSource
,而不是ComboBox
中的TextBox
。