如何将集合转换为计数?
当集合通过时,转换器应该能够返回计数以表示以下集合,
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;
}
答案 0 :(得分:2)
关联的ICollectionView
具有Count
属性,您可以将其数据绑定到
编辑:以下是访问相关ICollectionView
的方法WPF系统为绑定到ItemsSource属性的集合创建ICollectionView。您还可以使用CollectionViewSource.GetDefaultView()在代码隐藏中实例化ICollectionViews。请参阅msdn.microsoft.com/en-us/library/ms752284.aspx
另请注意,如果关联的源集合支持更改通知,则Count属性将发送更改通知
答案 1 :(得分:1)
如果我们将“集合”定义为实现ICollection
或ICollection<T>
的内容,则可以使用Count属性告诉我们集合中的元素数量,如果这是我们的需要知道。
如果我们希望根据ICollection.Count计算某些值但以某种方式修改,那么我们可以创建Generic Method来计算我们的值。例如,通用方法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();
}
}
答案 2 :(得分:0)
它不是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;
}