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

Pet*_*ber 2 wpf collectionviewsource

我想知道哪些类和/或接口可以分配给 WPF Collection\xe2\x80\x8bView\xe2\x80\x8bSource.\xe2\x80\x8bSource Property。帮助文档没有解释任何内容:

\n\n
public object Source { get; set; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

例如,我知道它可以与 a 一起使用List<>,它实现了许多接口。我想其中最基本的是IEnumerable<T>。是否Source接受任何实现的东西,并且类型的IEnumerable<T>原因是因为它也必须支持?它还支持什么?如果还实现了更高的接口,那么它会发挥优势吗?SourceobjectIEnumerableIList<>

\n\n

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

\n\n

如果您将一个问题标记为重复并阻止任何进一步的答案,只是因为您在某处看到了将某些内容分配给 的答案,那是非常令人沮丧的Collection\xe2\x80\x8bView\xe2\x80\x8bSource.Source。其中有很多。但请注意,这个问题不仅仅要求一个例子,而是我想知道可以分配的所有内容。

\n

Max*_*xim 5

来自参考来源

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

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

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

因此,有效类型是:

  • IE可枚举
  • 列表源
  • 数据源提供者

ICollectionView 源无效