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

时间:2019-01-16 11:05:25

标签: c# xaml uwp

我需要为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>

我正在考虑对面板进行子类化,但是问题是如何获得对当前组的引用?

1 个答案:

答案 0 :(得分:1)

https://docs.microsoft.com/en-us/windows/communitytoolkit/extensions/listviewbase

以上文章讨论了一种WCT好东西,它允许您动态更改将要呈现的项目的模板,此特定示例是静态表示的扩展,它仅用作列表视图的附加属性并循环浏览两种不同的模板

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

 private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)

这是发生所有魔术的地方。

实施说明

注意0:

如果您不了解mvvm和绑定,请不要忘记阅读并继续学习。

注释1:

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

注意2:

通过跟踪传入的args.ItemIndex,然后将其与基础数据上下文中包含的绑定源(可观察到的列表等)进行交叉检查,您将能够映射上述函数中的传入控件。

注意3:

要将其转换为被篡改/自定义的控件,您将必须像MyListview:ListView这样的实现自己的ListView实现

必须将Dependency属性转换为常规属性, 只需键入“ propdp”并双击Tab,即可调出默认模板。

您仍然必须引用XAML中所有不同的DataTamplates,如下面列出的展示应用程序中所示。

注释4:

在您的情况下,不需要多余的展示代码,例如不需要拉伸方向和斑马条纹。

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ListViewExtensions.cs

这是我所讨论的代码的确切位置,可以进行实际操作并进行操作,可以从商店中下载“ Windows Community Toolkit”,位于“扩展”部分。