WPF:什么可以用作集合视图源的源

时间:2017-05-25 15:48:48

标签: wpf collectionviewsource

我想知道,哪些类和/或接口可以分配给WPF Collection​View​Source.​Source Property。帮助文档没有解释任何内容:

public object Source { get; set; }

没有解释也没有代码示例,因为Source的类型为object,所以可以分配任何内容。我想Source支持各种接口作为源,但是哪些接口?

我知道例如它适用于List<>,它实现了许多接口。我想其中最基本的是IEnumerable<T>Source是否接受任何实施IEnumerable<T>的内容以及Source类型为object的原因是因为它还必须支持IEnumerable?还有什么支持?如果还实现了像IList<>这样的更高级别的界面吗?

对于那些无法抗拒将问题标记为重复的人:

如果您将问题标记为重复并阻止任何进一步的答案,那将是非常令人沮丧的,因为您已经在某处找到了为Collection​View​Source.Source分配内容的答案。他们中有很多人。但请注意,这个问题并不只是一个例子,但我想知道可以分配的所有内容。

1 个答案:

答案 0 :(得分:4)

来自Reference Source

public static readonly DependencyProperty SourceProperty
            = DependencyProperty.Register(
                    "Source",
                    typeof(object),
                    typeof(CollectionViewSource),
                    new FrameworkPropertyMetadata(
                            (object)null,
                            new PropertyChangedCallback(OnSourceChanged)),
                    new ValidateValueCallback(IsSourceValid));

让我们看看IsSourceValid是如何实现的:

private static bool IsSourceValid(object o)
{
    return (o == null ||
            o is IEnumerable ||
            o is IListSource ||
            o is DataSourceProvider) &&
            !(o is ICollectionView);
}

因此,有效类型是:

  • 的IEnumerable
  • IListSource
  • DataSourceProvider

ICollectionView无效来源。