WPF组合框错误中的不同值

时间:2011-05-14 18:01:40

标签: c# silverlight xaml combobox ienumerable

我有当前的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" />

问题是,我在组合框中收到错误:

enter image description here

任何人都可以帮助我解决我在这里做错的事。

1 个答案:

答案 0 :(得分:2)

问题是模型中的showName属性返回了一个要绑定到Text的{​​{1}}属性的集合,该属性是一个字符串。然后你有一个转换器,它将一个集合作为输入,在其上运行LINQ查询,返回另一个集合。 值(整个集合)通过绑定转换为使用TextBox的字符串,并在组合框中显示为单个条目。然后对组合框中的每个项重复该过程。

如果不确切知道自己要完成什么,很难确切地说明如何解决这个问题。例如,如果ToString等于:

showName

您希望这出现在组合框行吗?

  比尔迈克特德

如果是这样,那么您可以在使用string[] { "Bill", "Bill", "Mike", "Ted" }; 后使用Aggregate

但听起来你更希望Bill,Mike和Ted在组合框中显示为单独的项目。在这种情况下,您需要将转换器应用于Distinct本身的ItemsSource,而不是ComboBox中的TextBox