Listview 表单在分组列表视图中添加新项

Listview 表单在分组列表视图中添加新项,listview,xamarin.forms,grouping,Listview,Xamarin.forms,Grouping,如何将新项目添加到分组的Listview?我是否应该每次重新组合项目并将其分配给Listview.ItemsSource? 我添加了更新绑定到分组ListView的可观察集合的按钮。这是更新ListView的唯一正确方法吗?我错在哪里? 模型类: public class Phone { public string Title { get; set; } public string Company { get; set; } public int Price { get;

如何将新项目添加到分组的Listview?我是否应该每次重新组合项目并将其分配给Listview.ItemsSource? 我添加了更新绑定到分组ListView的可观察集合的按钮。这是更新ListView的唯一正确方法吗?我错在哪里? 模型类:

public class Phone
{
    public string Title { get; set; }
    public string Company { get; set; }
    public int Price { get; set; }
} 


MainPage 
    public partial class MainPage : ContentPage
        {
            // список групп, к которым идет привязка
            public ObservableCollection<Grouping<string, Phone>> PhoneGroups { get; set; }
        public MainPage()
        {
            InitializeComponent();

            // начальные данные
            var phones = new List<Phone>
            {
                new Phone {Title="Galaxy S8", Company="Samsung", Price=60000 },
                new Phone {Title="Galaxy S7 Edge", Company="Samsung", Price=50000 },
                new Phone {Title="Huawei P10", Company="Huawei", Price=10000 },
                new Phone {Title="Huawe Mate 8", Company="Huawei", Price=29000 },
                new Phone {Title="Mi6", Company="Xiaomi", Price=55000 },
                new Phone {Title="iPhone 7", Company="Apple", Price=38000 },
                new Phone {Title="iPhone 6S", Company="Apple", Price=50000 }
            };
            // получаем группы
            var groups = phones.GroupBy(p => p.Company).Select(g => new Grouping<string, Phone>(g.Key, g));
            // передаем группы в PhoneGroups
            PhoneGroups = new ObservableCollection<Grouping<string, Phone>>(groups);
            phonesList.ItemsSource = PhoneGroups;
        }

         private void AddItemButton_Clicked(object sender, EventArgs e)
        {
            phones.Add
            (
                 new Phone { Title = "Galaxy S3", Company = "Samsung", Price = 2500 }
            );
            // получаем группы
            var groups = phones.GroupBy(p => p.Company).Select(g => new Grouping<string, Phone>(g.Key, g));          

            // передаем группы в PhoneGroups
            PhoneGroups = new ObservableCollection<Grouping<string, Phone>>(groups);
            phonesList.ItemsSource = PhoneGroups;
        }
    }
公共类电话
{
公共字符串标题{get;set;}
公共字符串公司{get;set;}
公共整数价格{get;set;}
} 
主页
公共部分类主页:ContentPage
{
// список групп, к которым идет привязка
公共ObservableCollection电话组{get;set;}
公共主页()
{
初始化组件();
// начальные данные
var=新列表
{
新手机{Title=“Galaxy S8”,Company=“Samsung”,价格=60000},
新手机{Title=“Galaxy S7 Edge”,Company=“Samsung”,价格=50000},
新手机{Title=“华为P10”,Company=“华为”,价格=10000},
新手机{Title=“Huawe Mate 8”,Company=“华为”,价格=29000},
新手机{Title=“Mi6”,Company=“小米”,价格=55000},
新手机{Title=“iphone7”,Company=“Apple”,Price=38000},
新手机{Title=“iphone6s”,Company=“Apple”,价格=50000}
};
// получаем группы
var groups=phones.GroupBy(p=>p.Company)。选择(g=>newgrouping(g.Key,g));
//电话组
PhoneGroups=新的ObservableCollection(组);
phonesList.ItemsSource=电话组;
}
私有void AddItemButton_已单击(对象发送者,事件参数e)
{
电话。添加
(
新手机{Title=“Galaxy S3”,Company=“Samsung”,价格=2500}
);
// получаем группы
var groups=phones.GroupBy(p=>p.Company)。选择(g=>newgrouping(g.Key,g));
//电话组
PhoneGroups=新的ObservableCollection(组);
phonesList.ItemsSource=电话组;
}
}
Xaml主页

 <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:local="clr-namespace:HelloApp;assembly=HelloApp"
                 x:Class="HelloApp.MainPage">
        <StackLayout>
            <ListView x:Name="phonesList"
                  HasUnevenRows="True"
                  GroupDisplayBinding="{Binding Name}"
                  ItemsSource="{Binding PhoneGroups}"
                  IsGroupingEnabled="True">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <Label Text="{Binding Title}" />
                                <Label Text="{Binding Price}" />
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>        
            <Button x:Name="AddItemButton" Clicked="AddItemButton_Clicked" Text="AddItem" />        
        </StackLayout>
    </ContentPage>

当删除、添加或修改项目时,可观察的集合会侦听更改。一个简单的方法是:

var group=phonegroup[indexOfTheGroup];
group.Phone.add(new Phone{});
phonegroup[indexOfTheGroup]=group;
干杯。这对我有用