1.3 KiB
1.3 KiB
Common Patterns in Angor/Zafiro
Refreshable Collections
The RefreshableCollection pattern is used to manage lists that can be refreshed via a command, maintaining an internal SourceCache/SourceList and exposing a ReadOnlyObservableCollection.
Implementation
var refresher = RefreshableCollection.Create(
() => GetDataTask(),
model => model.Id)
.DisposeWith(disposable);
LoadData = refresher.Refresh;
Items = refresher.Items;
Benefits
- Automatic Loading: Handles the command execution and results.
- Efficient Updates: Uses
EditDiffinternally to update items without clearing the list. - UI Friendly: Exposes
Itemsas aReadOnlyObservableCollectionsuitable for binding.
Mandatory Validation Pattern
When validating dynamic collections, always use the Zafiro validation extension:
this.ValidationRule(
StagesSource
.Connect()
.FilterOnObservable(stage => stage.IsValid)
.IsEmpty(),
b => !b,
_ => "Stages are not valid")
.DisposeWith(Disposables);
Error Handling Pipeline
Instead of manual Subscribe, use HandleErrorsWith to pipe errors directly to the user:
LoadProjects.HandleErrorsWith(uiServices.NotificationService, "Could not load projects");