在带有社区工具包 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
值是否合适。或
或
注意:研究这个让我意识到我可以制作自己的可观察集合,但文档说尝试使用现有的集合,那么有没有满足我需要的集合?
处理这个填充列表对象然后填充您的集合的最佳方法。这适用于从 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();