Xamarin.Forms在分组ListView中添加新项

时间:2017-09-28 12:37:36

标签: listview xamarin.forms grouping

如何将新项目添加到分组列表视图中?我应该重新组合我的项目并每次将其分配给Listview.ItemsSource吗? 我添加了按钮来更新绑定到Grouped 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;
        }
    }

Xaml MainPage

 <?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>

1 个答案:

答案 0 :(得分:1)

Observable集合在删除或添加或修改项目时侦听更改。一种简单的方法是:

var group=phonegroup[indexOfTheGroup];
group.Phone.add(new Phone{});
phonegroup[indexOfTheGroup]=group;

干杯。这对我有用。