如何在 Xamarin Form 的 Grouped ListView 中创建页脚模板

Posted

技术标签:

【中文标题】如何在 Xamarin Form 的 Grouped ListView 中创建页脚模板【英文标题】:How to create a footer template in a Grouped ListView in Xamarin Form 【发布时间】:2019-10-19 04:11:56 【问题描述】:

我正在使用 Xamarin Form 和 C#。因此,我在 Xamarin 项目中有一个列表视图,我启用了 IsGroupingEnabled 属性。项目的项目和标题工作完美,但我无法设置页脚模板。 我需要创建一个列表视图,项目必须由以下内容组成:

    标题:用户信息。 项目:子项目列表。 页脚:操作按钮(共享、cmets 等)。

这是我的代码的一部分:

型号:

public class Post

    public long PostID  get; set; 
    public string Name  get; set; 
    public List<OptionDefault> OptionsDefault  get; set; 

public class OptionDefault

    public long OptionTypeID  get; set; 
    public string SubItemName  get; set; 

视图模型

public class PostsViewModel

    public InfiniteScrollCollection<Grouping<Post, OptionDefault>> Items  get; set;  = new InfiniteScrollCollection<Grouping<Post, OptionDefault>>();
    public IPostsService repository;

    public PostsViewModel(INavigation navigation)
    
        repository = new PostsService();

        Items = new InfiniteScrollCollection<Grouping<Post, OptionDefault>>
        
            OnLoadMore = async () => await GetItems()
        ;
        Items.LoadMoreAsync();
    
    async Task<List<Grouping<Post, OptionDefault>>> GetItems()
    
        IsWorking = true;
        List<Grouping<Post, OptionDefault>> items = new List<Grouping<Post, OptionDefault>>();
        try
        
            // load the next page
            var lists = await repository.GetList(Items.Count);
            foreach (var item in lists)
            
                for (int i = 0; i < item.OptionsDefault.Count; i++)
                
                    if ((i + 1) == item.OptionsDefault.Count)
                        item.OptionsDefault[i].LastItem = true;
                
                var group = new Grouping<Post, OptionDefault>(item, item.OptionsDefault);
                items.Add(group);
            
        
        catch (Exception ex)
        
            ErrorHelper.RegisterError(ex);
        
        finally
        
            IsWorking = false;
        
        return items;
    

.xaml:

<ListView ItemsSource="Binding Items"                     
            IsGroupingEnabled="True">
        <ListView.GroupHeaderTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Margin="5,15,5,0">
                        <Label Text="Binding Key.User.UserName" />
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.GroupHeaderTemplate>
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Margin="5,0,5,5">
                        <Label Text="Binding SubItemName" />
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我尝试过使用页脚模板,但它不起作用:

<ListView.FooterTemplate>
            <DataTemplate>
                <StackLayout Margin="5,0,5,5">
                    <Label Text="This is my footer" />
                </StackLayout>
            </DataTemplate>
        </ListView.FooterTemplate>

【问题讨论】:

【参考方案1】:

无论是&lt;ListView.Footer&gt;还是&lt;ListView.FooterTemplate&gt;,显示位置都是一样的,都在ListView的底部。 目前,xamarin 表单的 ListView 没有这个属性来让每个项目都有一个页脚。 也许您需要重新考虑应用的需求和 UI 设计。

【讨论】:

【参考方案2】:

CollectionView 现在在 Xamarin.Forms 中可用。它同时具有GroupHeaderTemplateGroupFooterTemplate。您可以使用它来显示数据组。执行此操作的代码与ListView 相同

【讨论】:

【参考方案3】:

不是&lt;ListView.FooterTemplate&gt;,而是&lt;ListView.Footer&gt;

<ListView.Footer>
    <StackLayout Margin="5,0,5,5">
        <Label Text="This is my footer" />
    </StackLayout>
</ListView.Footer>

有关详细信息,请参阅: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/listview/customizing-list-appearance#headers-and-footers

【讨论】:

嗨乔普,我需要一个项目的页脚,而不是列表视图。每个项目都必须有一个页脚。 所以您正在寻找类似 @​​987654325@ 但 Xamarin.Forms 没有此属性。如果您的 ListView 中的项目数量有限,您可能需要使用可绑定布局,它可以让您灵活地获得想要实现的目标。

以上是关于如何在 Xamarin Form 的 Grouped ListView 中创建页脚模板的主要内容,如果未能解决你的问题,请参考以下文章

如何以 xamarin form.ios 在 Icloud 上存储数据

如何在Xamarin.Form中的Frame Renders中使3个圆角变圆?

Xamarin Form - 如何在 UWP 中为 MyToolkit.Controls.DataGrid 设置样式

Hybrid WebView 导航和导航事件 Xamarin Form

Xamarin Form - 如何在 UWP 中选中另一个复选框上的复选框

Xamarin.Form 蓝牙ble