如何绑定到字典中的集合值

问题描述 投票:0回答:1

上下文:

在带有社区工具包 MVVM 的 .Net Maui 中

我有一个工作绑定:

[ObservableProperty] ObservableCollection<ProductModel> items;

CollectionView
根据
ObservableCollection

上的项目更新其项目

我没有在这个特定过程中使用 xaml,而是因为它是一个动态可视化工具,所以我用 C# 创建它

//binding is the viewmodel
CollectionView AddList(ShopModel shop)
{
    CollectionView list = new()
    {
        ItemsSource = binding.Items,
    (...)

问题:

我想按商店分开产品,所以我开始这样做:

[ObservableProperty] Dictionary<ShopModel, ObservableCollection<ProductModel>> items;

在视图c#页面中:

ItemsSource = binding.Items[shop]

现在我绑定到

ObservableCollection
值并且
CollectionView
没有更新。

调试时如果我手动刷新我看到产品

item
成为
CollectionView
上的项目但它不会仅在调试下拉列表中显示在屏幕上。

想法:

我认为一个问题是因为 Dictionary 没有实现

INotifyPropertyChanged
,但是字典上的值实现了而且它不起作用。

我想也许我可以把字典改成类似的东西:

[ObservableProperty] ObservableCollection<KeyValuePair<ShopModel, ObservableCollection<ProductModel>> items

我想这不像字典那样高效,我需要重写所有特定于字典的逻辑。

请注意,我想要一个

CollectionView
绑定到每个
shop
(键)的一个产品集合,我不知道有多少个
shops

结论:

我想了解:

  • 如果这是一个好方法,因为我不确定
    ObservableCollection
    值是否合适。

  • 如何绑定到字典中的集合值。

  • 如何绑定到链接到一个键的任意数量的列表。 (如果除了我探索的还有其他方法)

注意:研究这个让我意识到我可以制作自己的可观察集合,但文档说尝试使用现有的集合,那么有没有满足我需要的集合?

c# dictionary data-binding maui
1个回答
0
投票

处理这个填充列表对象然后填充您的集合的最佳方法。这适用于从 API 检索数据或将数据存储在本地的情况。

XAML:

<CollectionView ItemsSource="{Binding Products}">
        <CollectionView.ItemTemplate>
                 <DataTemplate models:ProductModel>
                  your design...
                 </DataTemplate>
         </CollectionView.ItemTemplate>
 </CollectionView >

其中:{Binding Products} 是视图模型中 ObservableCollection 的名称,ProductModel 是包含所需属性的模型类。

视图模型:

public ObservableCollection<ProductModel> Products { get; set; } = new();

然后你只需要在Collection中填入:

Products.Add(new ProductModel()
{
  Properties...
});

您可以使用列表的 foreach 来获取对象以填充集合。

如果您的数据在字典中,您可以使用它来将其转换为列表:

list = dic.Keys.ToList();
© www.soinside.com 2019 - 2024. All rights reserved.