Конвертер Коллекция в Счет - PullRequest
0 голосов
/ 03 июля 2011

Как преобразовать коллекцию в счет?

Где при передаче коллекции конвертер должен иметь возможность возвращать счет для, скажем, следующих коллекций,

Dictionary, ObservableCollection или List

сейчас у меня есть следующее, но не работает,

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return ((System.Collections.ICollection)value) != null ? ((System.Collections.ICollection)value).Count : 0;
}

Ответы [ 3 ]

2 голосов
/ 03 июля 2011

Связанное ICollectionView имеет свойство Count, которое можно привязать к базе данных

Редактировать: вот как вы получаете доступ к соответствующему ICollectionView

Система WPF создает ICollectionView для коллекцийкоторые связаны со свойствами ItemsSource.Вы также можете создать экземпляры ICollectionViews в выделенном фрагменте кода с помощью CollectionViewSource.GetDefaultView ().См. Msdn.microsoft.com/en-us/library/ms752284.aspx

Также обратите внимание, что свойство Count будет отправлять уведомления об изменениях, если связанная исходная коллекция поддерживает уведомления об изменениях

1 голос
/ 03 июля 2011

Если мы определяем «коллекцию» как нечто, реализующее ICollection или ICollection<T>, то свойство Count доступно, чтобы сообщить нам числоэлементов в коллекции, если мы должны это знатьрассчитать стоимость для нас.Например, обобщенный метод Convert<T> может принимать формальный параметр ICollection<T> value.Такая функция может быть вызвана с использованием всего, что реализует ICollection<T> в качестве фактического параметра.

Поскольку компилятор может вывести аргумент универсального типа, нам не нужно явно указывать аргумент типа при вызове универсального метода (хотя мы можем сделать это, если захотим или захотим).

Например ...

class Program
{
    static public int Convert<T>(ICollection<T> value, Type targetType, object parameter, CultureInfo culture)        {
        return value.Count;
    }

    static void Main(string[] args)
    {
        Dictionary<int, string> di = new Dictionary<int,string>();
        di.Add(1, "One");
        di.Add(2, "Two");
        di.Add(3, "Three");
        Console.WriteLine("Dictionary count: {0}", di.Count);
        Console.WriteLine("Dictionary Convert: {0}", Convert(di, null, null, null));

        ObservableCollection<double> oc = new ObservableCollection<double>();
        oc.Add(1.0);
        oc.Add(2.0);
        oc.Add(3.0);
        oc.Add(4.0);
        Console.WriteLine("ObservableCollection Count: {0}", oc.Count);
        Console.WriteLine("ObservableCollection Convert: {0}", Convert(oc, null, null, null));

        List<string> li = new List<string>();
        li.Add("One");
        li.Add("Two");
        li.Add("Three");
        li.Add("Four");
        li.Add("Five");
        Console.WriteLine("List Count: {0}", li.Count);
        Console.WriteLine("List Convert: {0}", Convert(li, null, null, null));

        Console.ReadLine();
    }
}
0 голосов
/ 03 июля 2011

Разве это не вариант ToList () и получить количество?

static void Main(string[] args)
        {
            IDictionary<int,int> s = new Dictionary<int, int>();
            ObservableCollection<int> s1 = new ObservableCollection<int>();
            IList<int> s2 = new List<int>();

            int count = GetCount(s.ToList());
            int count1 = GetCount(s1.ToList());
            int count2 = GetCount(s2.ToList());

        }


 private static int GetCount(ICollection s)
        {
            return s.Count;
        }
...