Xamarin Listview grouping

前端 未结 3 1897
一整个雨季
一整个雨季 2020-12-11 03:30

I am dealing with a listview in xamarin.froms. I can easily populate the listview with a listitem for each record:

[
    {\"cat\":1, \"name\":\"alpha\"},
            


        
3条回答
  •  醉酒成梦
    2020-12-11 04:12

    In my environment, the code was not work in this url http://motzcod.es/post/94643411707/enhancing-xamarinforms-listview-with-grouping .

    The code that does not work is here

    var partnersSorted = from item in Partners
             orderby item.UserName
             group item by item.UserNameSort into PartnersGroup
             select new Grouping(PartnersGroup.Key, PartnersGroup);
    
    MonkeysGrouped = new ObservableCollection>(partnersSorted);
    

    So I changed the code.

    var sortedPartners = Partners.OrderBy(x => x.UserName).GroupBy(y => y.UserNameSort);
    foreach (var item in sortedPartners)
    {
         PartnersGrouped.Add(new PartnersGrouping(item.Key, Partners.Where(x=>x.UserNameSort == item.Key)));
    }
    

    You can see like this.

    [https://i.stack.imgur.com/BswPq.png][1]

    here is my all scripts

    Item is Partner

    Item.cs

    using System;
    
    namespace NewHeats.Models
    {
        public class Item
        {
            public string Id
            {
                get;
                set;
            }
            public string UserName
            {
                get;
                set;
            }
            public DateTime RegisterDate
            {
                get;
                set;
            }
            public string Field
            {
                get;
                set;
            }
            public string Password
            {
                get;
                set;
            }
            public int Heats
            {
                get;
                set;
            }
            public string UserNameSort
            {
                 get
                {
                     if (string.IsNullOrWhiteSpace(UserName) || UserName.Length == 0)
                        return "?";
    
                     return UserName[0].ToString().ToUpper();
                }
            }
        }
     }
    

    PartnersGrouping.cs

    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    namespace NewHeats.Models
    {
        public class PartnersGrouping : ObservableCollection
        {
            public K Key { get; private set; }
    
            public PartnersGrouping(K key,IEnumerable items)
            {
                Key = key;
                foreach (var item in items)
                {
                    this.Items.Add(item);
                }
            }
        }
    }
    

    PartnersViewModel.cs

    using System;
    using System.Windows.Input;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
    using Xamarin.Forms;
    using NewHeats.Models;
    using System.Threading.Tasks;
    using System.Diagnostics;
    using System.Linq;
    using System.Diagnostics.Contracts;
    
    namespace NewHeats.ViewModels
    {
        public class PartnersViewModel : BaseViewModel
        {
            public Item Me
            {
                get;
                set;
            }
            public ObservableCollection Partners { get; set; }
            public ObservableCollection> PartnersGrouped { get; set; }
            public Item SelectedPartner { get; set; }
            public Command LoadPartnersCommand { get; set; }
            public PartnersViewModel()
            {
                Title = "Partners";
                Partners = new ObservableCollection();
                PartnersGrouped = new ObservableCollection>();
                LoadPartnersCommand = new Command(async() =>await ExecuteLoadPartnersCommand());
            }
    
            async Task ExecuteLoadPartnersCommand()
            {
                Contract.Ensures(Contract.Result() != null);
                if (IsBusy)
                    return;
                IsBusy = true;
                try
                {
                    Me = await MockUsrDataStore.GetItemAsync("naoto");                           
                    Partners.Clear();
                    var allfriends = await MockFriDataStore.GetItemsAsync(true);                 
                    var myFriends = allfriends.Where(x => x.MyId == Me.Id);                      
                    var allUsers = await MockUsrDataStore.GetItemsAsync(true);                   
    
                    foreach (var item in myFriends)
                    {
                        var partner = allUsers.FirstOrDefault(x => x.Id == item.FriendId);       
                        if (partner!=null)
                        {
                            Partners.Add(partner);
                        }
                    }
                    var sortedpartners = Partners.OrderBy(x => x.UserName).GroupBy(y => y.UserNameSort);
                    foreach (var item in sortedpartners)
                    {
                         PartnersGrouped.Add(new PartnersGrouping(item.Key, Partners.Where(x=>x.UserNameSort == item.Key)));
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
                finally
                {
                    IsBusy = false;
                }
            }
        }
    }
    

    PartnerPage.xaml

    
    
        
            
                
                #2196F3
                #96d1ff
                #999999
            
        
        
            
                
            
            
                
                    
                        
                            
                                
                                    
                                           
                                
                            
                        
                        
                            
                                
                                    
                                        
                                            
                                        
                                        
                                            
                                            
                                        
                                        
                                        
                                           
                                               
                                    
                                
                            
                        
                    
                
            
        
    
    

    Thanks!!

提交回复
热议问题