9

CollectionViewSource, ICollectionView,ListCollectionViewIList之间有什么区别BindingListCollectionView
何时何地使用所有这些集合?

我知道. CollectionViewSource_CollectionViewSourceListCollectionView

你能解释一下每种集合的确切区别和用例吗?

4

1 回答 1

0

基本上,CollectionView 是一种在 WPF 中以最简单的方式构建 Master Ditail View 的方法。首先,我想向您介绍回退机制。

<Window.Resources>
        <x:Array x:Key="planets" Type="{x:Type local:Planets}">
            <local:Planets Name="Earth" Diameter="12,756 km" Mass="5.97 10^24kg" Density="5514 kg/m³"/>
            <local:Planets Name="Mars" Diameter="6792 km" Mass="0.642 10^24kg" Density="3933 kg/m³"/>
            <local:Planets Name="Jupiter" Diameter="142,984 km" Mass="1898 10^24kg" Density="1326 kg/m³"/>
        </x:Array>
    </Window.Resources>
    <DockPanel DataContext="{StaticResource planets}">
        <ListBox ItemsSource="{Binding}"
                 IsSynchronizedWithCurrentItem="True"
                 DisplayMemberPath="Name" Width="125"/>
        <StackPanel>
            <TextBlock Text="{Binding Name}"/>
            <TextBlock Text="{Binding Diameter}"/>
            <TextBlock Text="{Binding Mass}"/>
            <TextBlock Text="{Binding Density}"/>
        </StackPanel>
    </DockPanel>
public class Planets
    {
        public string Name { get; set; }
        public string Diameter { get; set; }
        public string Mass { get; set; }
        public string Density { get; set; }
    }

我们有一个简单的 type 数组PlanetsDisplayMemberPath-Property也已设置Name,因此行星名称显示在ListBox. 除了 之外ListBox,各个星球的详细信息都显示在 中TextBlock。Vourla,我们有我们的工作主细节视图,隐含使用CollectionView通过后备机制

在此处输入图像描述

由于设置了属性,WPF会在后台IsSynchronizedWithCurrentItem="True"生成 a并将在 中选择的对象保存在. 现在是第一个搜索数组上的 的情况;它在那里找不到任何东西,但后备机制将其转发到. 也可以直接引用的。为此,在.Default-CollectioViewListBoxCurrentItem-PropertyBindingTextBlockPropertyPlanets[]CurrentItem-PropertyDefault-CollectionViewCurrentItem-PropertyDefault-CollectionView(/)PropertyBinding

<TextBlock Text="{Binding /Name}"/>

回退机制仅在Path-Property设置 的情况下才有效Binding

CollectionViewSource派生自CollectionView并且是提供某些Properties诸如Source或的代理View

还有其他三个派生自 的类CollectionView,它们ItemCollectionListCollectionViewBindingListCollectionView接口,即它们前面的类型,是为了避免与直接耦合。遵循的原则称为依赖注入(I)

这三个 ItemCollectionListCollectionView并且BindingListCollectionView是为不同的目的而设计的。ItemCollection因此提供了一个IEnumerable、ListCollectionViewanIListBindingListCollectionView一个IBindingListObject。因此,为不同的目的提供了不同的类型。

总而言之,CollectionView是一款功能强大的WPF工具;您可以排序、分组等并显示详细信息。

我希望这可以进一步帮助您。问候迈克尔

于 2021-12-03T22:14:17.367 回答