Отличительные значения в WPF Combobox Error - PullRequest
1 голос
/ 14 мая 2011

У меня есть текущий 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 Ответ

2 голосов
/ 14 мая 2011

Проблема в том, что свойство showName в вашей модели возвращает коллекцию, которую вы хотите привязать к свойству Text TextBox, которое является строкой.Затем у вас есть конвертер, который принимает коллекцию в качестве входных данных, выполняет запрос LINQ, который возвращает другую коллекцию. Это значение , вся коллекция, преобразуется путем привязки к строке с использованием ToString и отображается как одна запись в поле со списком.И затем этот процесс повторяется для каждого элемента в поле со списком.

Не зная точно, что вы пытаетесь достичь, трудно предположить, как именно это исправить.Например, если showName равно:

string[] { "Bill", "Bill", "Mike", "Ted" };

Хотите, чтобы это появилось в строке со списком?

Билл Майк Тед

Если это так, то вы можете использовать Aggregate после того, как используете Distinct.

Но более вероятно, что вы хотите, чтобы Билл, Майк и Тед появлялись как отдельные элементы в поле со списком.В этом случае вам необходимо применить преобразователь к ItemsSource для самого ComboBox вместо TextBox в ItemTemplate.

...