在 mvvm 中创建可观察属性的正确方法是
[ObservableProperty]
private string _name;
但是,在某些情况下,您需要更改集合。如何在不声明 Public 的情况下正确执行此操作?
private double _currentProgressPct;
public double CurrentProgressPct
{
get => _currentProgressPct;
set
{
_dispatcherQueue.TryEnqueue(DispatcherQueuePriority.High, () =>
{
SetProperty(ref _currentProgressPct, value);
});
}
}
据我了解,根据 mvvm,第一种方法是正确的,但后者不正确?
另外,根据本文,您需要实现 INotifyPropertyChanged 接口。但是,使用 [ObservableProperty] 时这是否必要?据我了解,社区工具包需要该类为可观察对象?
我之所以问最后几个问题,是因为使用具有内存焦点的性能分析器检查时,绑定似乎没有被释放。根据另一个线程,我发现这可能是因为未实现 INotifyProperyChanged?
首先,ObservableObject和ObservableProperty来自CommunityToolkit.Mvvm NuGet 包。
现在一般来说,你应该选择第一个:
然后忘记该
_name
字段并使用生成的Name
属性。第二个:
使用DispatcherQueue来确保值将在 UI 线程上更新。此外,在大多数情况下可能不是什么大问题,但值得注意的是,如果您
CurrentProgressPct
在 UI 线程上设置,CurrentProgressPct
它将被排队而不是立即更新。如果您遇到无法
CurrentProgressPct
在 UI 线程上更新的情况,您可以轻松地执行以下操作:更新
我并不是说你不应该使用第二个。有些情况下你可能需要它。让我给你展示另一个案例: