C# 如何在分组列表视图中使用不同的面板?

C# 如何在分组列表视图中使用不同的面板?,c#,xaml,uwp,C#,Xaml,Uwp,我需要为ListView中的特定部分/组使用不同的面板。如何使用XAML、C或任何东西来实现这一点?我已经试过使用GroupedStyleSelector,但是没有用,我研究过,但结果证明它不是为这个目的设计的。这是我现在的XAML: <ListView ItemsSource="{Binding Source={StaticResource cvs}}"> <ListView.GroupStyle> <GroupStyle HidesIfE

我需要为ListView中的特定部分/组使用不同的面板。如何使用XAML、C或任何东西来实现这一点?我已经试过使用GroupedStyleSelector,但是没有用,我研究过,但结果证明它不是为这个目的设计的。这是我现在的XAML:

<ListView ItemsSource="{Binding Source={StaticResource cvs}}">
    <ListView.GroupStyle>
        <GroupStyle HidesIfEmpty="True">
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    // I want to change this for a particular group
                    <uwp:SGStaggeredPanel/>
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>
我正在考虑将面板子类化,但问题是如何获得对当前组的引用

上面的文章讨论了一个WCT goody,它允许您动态更改即将呈现的项目的Tamplate,这个特定的示例是一个静态表示的扩展,它只是作为listview的附加属性工作,并循环使用两个不同的模板

但是,您可以轻松地将ListView扩展到模板控件中,然后更轻松地访问包含Itemsource的Viewmodel,从那时起,您可以继续更改

 private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)
这就是所有魔法发生的地方

实现符号

注0: 如果您不了解mvvm和绑定,请忘记您曾经阅读过这篇文章,转而去研究它

注1: 所有没有明确定义数据上下文的子控件都将继承其父控件

注2: 通过跟踪传入的args.ItemIndex,然后与底层datacontext中的绑定源可观察列表等交叉检查,您将能够在上述函数中映射传入控件

注3: 要将其转换为tamplated/custom控件,您几乎必须自己实现ListView,如MyListview:ListView

依赖属性必须转换为常规属性, 只需键入“propdp”并双击Tab,即可调出默认的tamplate

您仍然需要引用XAML中的所有不同数据标签,如下面列出的showcase应用程序中所示

注4: 减少showcase代码、拉伸方向和斑马条纹等在您的案例中不需要的松弛

这就是我提到的代码片段的确切位置,要在实际操作中检查并使用它,请从商店下载“Windows社区工具包”,它位于扩展部分