微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin.Forms:GroupHeaderTemplate {Binding Key} 不起作用,但 ItemTemplate {Binding Key} 运行良好

如何解决Xamarin.Forms:GroupHeaderTemplate {Binding Key} 不起作用,但 ItemTemplate {Binding Key} 运行良好

我正在使用 Xamarin 表单构建一个移动应用程序。我的问题是我无法获得 GroupHeader。我检查了所有平台和网站。我找不到任何解决我的问题的方法。我的第一个列表视图运行良好,在第二个列表视图中我想用 groupheaders 显示我的值。我的 .xaml 和 .cs 代码和 scroonshots 如下。我成功地从网络服务中获得了我的所有价值。我的值显示在第二个列表视图中,组标题除外。

<ListView x:Name="listview" HasUnevenRows="True" SeparatorVisibility="Default" 
                      GroupdisplayBinding="{Binding Key}"
                  IsGroupingEnabled="True" ItemsSource="{Binding GroupedList}"
                  CachingStrategy="RecycleElement" Margin="0,15">

                <ListView.GroupHeaderTemplate>
                    <DataTemplate>
                        <ViewCell Height="50" >
                            <Label Text ="{Binding Key}" Margin="0,20,0" FontSize="Medium" TextColor="Gray" />
                        </ViewCell>
                    </DataTemplate>
                </ListView.GroupHeaderTemplate>

                <ListView.ItemTemplate>
                    <DataTemplate>

                        <ViewCell>
                            

                            <Grid BackgroundColor="White" Margin="0,1" >

                                <Grid.RowDeFinitions>
                                    <RowDeFinition Height="0.4*"/>
                                    <RowDeFinition Height="0.6*"/>
                                </Grid.RowDeFinitions>

                                <Grid.ColumnDeFinitions>
                                    <ColumnDeFinition Width="2*" />
                                    <ColumnDeFinition Width="3*" />
                                </Grid.ColumnDeFinitions>

                                <Label  Text="{Binding PayDeskName}"  Grid.Row="0" HorizontalOptions="Start" VerticalTextAlignment="Center" FontAttributes="Bold" TextColor="Gray"/>
                                <Label Grid.Column="0" Text="{Binding CollectionType}"  Grid.Row="1" HorizontalOptions="Start" VerticalTextAlignment="Center" FontAttributes="Bold" TextColor="Blue"/>
                                <Label Grid.Column="1" Text="{Binding CollectionAmount,StringFormat='{0:N}'}" Grid.Row="1" HorizontalOptions="End" VerticalOptions="Center" FontSize="Large" TextColor="Blue"></Label>


                            </Grid>
                        </ViewCell>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

--

using MunIS.Parameters;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;


namespace MunIS.AccrumentCollection
{
[XamlCompilation(XamlCompilationoptions.Compile)]
public partial class CollectionPage : ContentPage
{
    public CollectionPage()
    {
        InitializeComponent();
    }

    public PayDeskBaseCollectionParameters[] CollectionList { get; set; }
    public ObservableCollection<Grouping<string,PayDeskBaseCollectionParameters>> GroupedList { get; set; }

    public IEnumerable<IGrouping<string,PayDeskBaseCollectionParameters>> CollectionTypeBasedGroupedList { get; set; }

    async void GetCollectionList(object sender,EventArgs e)
    {
        activityStackLayout.IsVisible = true;
        activityIndicator.IsRunning = true;
        loadingTxt.IsVisible = true;

        string queryIntervalStartDate = dtIntervalStart.Date.ToString("MM.dd.yyyy");
        string queryIntervalFinishDate = dtIntervalFinish.Date.ToString("MM.dd.yyyy");
        CollectionDetailQueryCriteriaParameters criteria = new CollectionDetailQueryCriteriaParameters();
        criteria.CollectionDateStart = dtIntervalStart.Date;
        criteria.CollectionDateFinish = dtIntervalFinish.Date;

        ServiceCaller serviceCaller = new ServiceCaller();
        CollectionList = await serviceCaller.ListPayDeskBasedCollections(criteria);



        var groupedCollectionList = CollectionList.GroupBy(c => c.CollectionType).Select(
        g => new
        {
            CollectionType = g.Key,CollectionAmount = g.Sum(s => s.CollectionAmount)
        });




        GroupedList = new ObservableCollection<Grouping<string,PayDeskBaseCollectionParameters>>(CollectionList.GroupBy(c => c.PayDeskName)
            .Select(k => new Grouping<string,PayDeskBaseCollectionParameters>(k.Key + "\t\t" + CollectionList
            .Where(c => c.PayDeskName == k.Key)
            .Sum(x => x.CollectionAmount).ToString("N"),k)));


        listview1.ItemsSource = groupedCollectionList;
        listview.ItemsSource = GroupedList;



        activityIndicator.IsRunning = false;
        loadingTxt.IsVisible = false;
        activityStackLayout.IsVisible = false;




    }
}
}

这是我的 Grouping.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;

namespace MunIS
{
public class Grouping<K,T> : ObservableCollection<T>
{
    public K Key { get; set; }

    public Grouping(K key,IEnumerable<T> items)
    {
        Key = key;
        foreach (var item in items)
        {
            this.Items.Add(item);
        }
    }
}
}

See my Page I want to get groupheaders

解决方法

我认为您需要从列表视图元素中删除 GroupDisplayBinding。

<ListView x:Name="listview" HasUnevenRows="True" SeparatorVisibility="Default" 
                      GroupDisplayBinding="{Binding Key}"
                  IsGroupingEnabled="True" ItemsSource="{Binding GroupedList}"
                  CachingStrategy="RecycleElement" Margin="0,15">

此属性与 GroupHeaderTemplate 属性互斥。 设置它会将 GroupHeaderTemplate 设置为 null。

来自文档:https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.listview.groupdisplaybinding?view=xamarin-forms#remarks

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。