CollectionView 分组不显示最后一个组中的所有项目

CollectinView Grouping doesnt show all Items in the last Group

我正在 Xamarin Forms 中为 Android 开发移动应用程序,遇到一个问题。我有一个 ObservableCollection,我用以下模型填充。

    private int _category_ID;
    public int Category_ID
    {
        get
        {
            return _category_ID;
        }
        set
        {
            _category_ID = value;
            OnPropertyChanged("_category_ID");
        }
    }
    private string _category_Name;
    public string Category_Name
    {
        get
        {
            return _category_Name;
        }
        set
        {
            _category_Name = value;
            OnPropertyChanged("_category_Name");
        }
    }
    private string _category_Description;
    public string Category_Description
    {
        get
        {
            return _category_Description;
        }
        set
        {
            _category_Description = value;
            OnPropertyChanged("_category_Description");
        }
    }
    public CategoryModel(string name, List<ProductModel> products) : base(products)
    {
        Category_Name = name;
    }

这很好用,当我在 ObservableCollection 中调试时,所有类别和项目都正确显示。示例:类别 1 = 2 个项目类别 2 = 3 个项目类别 3 = 4 个项目。 行得通。

但我的问题是,当我像这样使用 CollectionView 时

      <CollectionView ItemsSource="{Binding ObservCollectionCategory}" IsGrouped="True">
                    <CollectionView.ItemTemplate>
                        <DataTemplate>
                            <ScrollView>
                            <Grid Padding="10">
                                <StackLayout BackgroundColor="Blue">
                                    <Label Text="{Binding Product_Name}"/>
                                    <Label Text="{Binding Product_Description}"/>
                                </StackLayout>
                            </Grid>
                            </ScrollView>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                    <CollectionView.GroupHeaderTemplate>
                        <DataTemplate >
                            <Label Text="{Binding Category_Name}"/>
                        </DataTemplate>
                    </CollectionView.GroupHeaderTemplate>
                </CollectionView>

视图只显示最后一个类别的第一项,而其他项则忽略。所有其他类别显示正确。 当我在 ObservableCollection 的末尾创建一个空白的 Categroy 时,最后一个类别中的所有项目都会显示在视图中。但是最后我有一个空组。

我试着告诉我 header 中的计数,以及正确的计数 (4)。

您可以试试下面的代码。

型号:

 public class ProductModel : INotifyPropertyChanged
{

    private string _product_Name;
    public string Product_Name
    {
        get
        {
            return _product_Name;
        }
        set
        {
            _product_Name = value;
            OnPropertyChanged("Product_Name");
        }
    }
    private string _product_Description;
    public string Product_Description
    {
        get
        {
            return _product_Description;
        }
        set
        {
            _product_Description = value;
            OnPropertyChanged("Product_Description");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

}
public class CategoryModel : List<ProductModel>, INotifyPropertyChanged
{
    private string _category_Name;

    public event PropertyChangedEventHandler PropertyChanged;

    public string Category_Name
    {
        get
        {
            return _category_Name;
        }
        set
        {
            _category_Name = value;
            OnPropertyChanged("Category_Name");
        }
    }

    public CategoryModel(string name, List<ProductModel> diary) : base(diary)
    {
        Category_Name = name;
    }
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

后面的代码:

public ObservableCollection<CategoryModel> ObservCollectionCategory { get; set; } = new ObservableCollection<CategoryModel>();

    public Page18()
    {
        InitializeComponent();
        ObservCollectionCategory.Add(new CategoryModel("Categroy 1", new List<ProductModel>
        {
            new ProductModel(){ Product_Name="item1", Product_Description="Description1"},
            new ProductModel(){ Product_Name="item2", Product_Description="Description2"},
        }));
        ObservCollectionCategory.Add(new CategoryModel("Categroy 2", new List<ProductModel>
        {
            new ProductModel(){ Product_Name="item1", Product_Description="Description1"},
            new ProductModel(){ Product_Name="item2", Product_Description="Description2"},
            new ProductModel(){ Product_Name="item3", Product_Description="Description3"},
        }));
        ObservCollectionCategory.Add(new CategoryModel("Categroy 3", new List<ProductModel>
        {
            new ProductModel(){ Product_Name="item1", Product_Description="Description1"},
            new ProductModel(){ Product_Name="item2", Product_Description="Description2"},
            new ProductModel(){ Product_Name="item3", Product_Description="Description3"},
            new ProductModel(){ Product_Name="item4", Product_Description="Description4"},
        }));

        this.BindingContext = this;
    }

输出: