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

Я хотел бы получить разные значения в поле со списком данных

в качестве примера можно привести следующие значения: синий, синий, желтый, красный, оранжевый

Я бы хотел, чтобы он просто отображал синий раз.

Моя основная идея заключалась в том, чтобы собрать все значения поля со списком в массив, установить массив как отдельный и затем заново заполнить поле со списком. Есть ли другой способ?

Если нет, то как бы мне получить все значения из поля со списком?

Спасибо

РЕДАКТИРОВАТЬ - Класс:

public class DistinctConverter : IValueConverter
{

}

РЕДАКТИРОВАТЬ - Отладка:

enter image description here

Ответы [ 3 ]

9 голосов
/ 13 мая 2011

Вы можете создать IValueConverter, который преобразует ваш список в отдельный список:

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();
    }
}

добавить это к ресурсам:

<local:DistinctConverter x:Key="distinctConverter" />

и используйте его так:

<ComboBox ItemsSource="{Binding Vals, Converter={StaticResource distinctConverter}}" />
1 голос
/ 13 мая 2011

Допустим, у вас есть List<String> values = blue, blue, yellow, red, orange

вы можете сделать

ComboBox.ItemsSource = values.Distinct();

или, если вы собираетесь использовать MVVM, вы можете создать свойство и связать источник элементов комбинированного списка со свойством, подобным

public List<string> values
{
    get
    {
    return value.Distinct();
     }
}
0 голосов
/ 11 марта 2013

если вы используете WPF c # 4.0

List<object> list = new List<object>();
        foreach (object o in myComboBox.Items)
            {
            if (!list.Contains(o))
                {
                list.Add(o);
                }
            }
        myComboBox.Items.Clear();
        myComboBox.ItemsSource=list.ToArray();
...