如何在Xamarin.Form中将ObservableCollection排序为字母

时间:2019-05-05 08:26:53

标签: c# xamarin

我有ObservableCollection列表,我想按字母排序 例如:当我输入3个名字(篮球,阿拉伯,俱乐部)时 输出 : 篮球, 阿拉伯, 俱乐部

我想要这样: 阿拉伯, 篮球, 俱乐部,

此代码用于ObservableCollection:

        public ObservableCollection<Contact> ContactList { get; set; }

以及此添加和删除项目的代码

 public ContactsListView()
        {

            InitializeComponent();
            ContactList = new ObservableCollection<Contact>();

            BindingContext =  new Contact();
            MessagingCenter.Subscribe<Contact>(this, "addNew", (addItem) =>
            {
                ContactList.Add(new Contact { Name = addItem.Name, PhoneNo = addItem.PhoneNo, Address = addItem.Address, NickName = addItem.NickName });

            });

            MessagingCenter.Subscribe<Contact>(this, "deleteContact", (Account) =>
            {
                ContactList.Remove(Account);
            });

                        MyListView.ItemsSource = ContactList;
            AddNewContact.Clicked+= AddNewContact_Clicked;
        }

3 个答案:

答案 0 :(得分:0)

您可以使用linq进行如下排序:

var sortedContactList = ContactList.OrderBy(x => x.Name);

您需要在文件顶部添加using System.Linq;

答案 1 :(得分:0)

  

ObservableCollection类本身没有排序方法。   但是通过使用集合,您可以重新创建它。

var ContactList = new ObservableCollection<string> { "club", "arab", "basketball", };
 ContactList = new ObservableCollection<string>(ContactList.OrderBy(i => i));

答案 2 :(得分:0)

您可以使用ObservableCollection方法对当前ContactList进行排序,而不是为Move重新创建新排序的 ContactList

private void SortContacts()
{
    // order by name
    var sortedContact = ContactList.OrderBy(x => x.Name).ToList();

    for (var i = 0; i < sortedContact.Count; i++)
        ContactList.Move(ContactList.IndexOf(sortedContact[i]), i);
}

添加或删除联系人项目后,调用上述方法。