我正在使用 CommunityToolkit.Mvvm,但 ObservableCollection 存在一些问题。 我有一些像这样声明的视图模型:
public partial class LabourListViewModel: ObservableObject
{
[ObservableProperty]
private ObservableCollection<LabourJson> _labourList = [];
[RelayCommand]
public void LabourAdded( LabourJson labour )
{
LabourList.Insert( 0, labour );
}
}
问题是当调用方法LabourAdded时,UI不会更新。我认为 ObservableProperty 应该观察变化并相应地更新 UI?
如果插入后我确实像下面那样,那么 UI 就会更新,但为什么我每次都需要重新创建列表?
LabourList = new ObservableCollection<LabourJson>( LabourList.ToList() );
ObservableCollection
列表应定义如下:
ObservableCollection<LabourJson> LabourList {get;} = new ObservableCollection<LabourJson> LabourList
即没有必要应用
[ObservableProperty]
更改的属性,并且您不应该实现 setter。 ObservableCollection
由初始化程序初始化一次,从此时起,每当您从集合中添加、更新或删除时,ObservableCollection
都会自动广播 CollectionChanged
事件。
通常,此类集合的消费者是
ListView
和 CollectionView
,他们知道观看 CollectionChanged
事件来更新其 UI。