Help us improve
Share bugs, ideas, or general feedback.
From uno-platform-studio
Creates and uses IListFeed<T> for reactive collections in MVUX. Covers factory methods, operators like Where/Select, and binding to ListView via FeedView.
npx claudepluginhub unoplatform/studio --plugin uno-platform-studioHow this skill is triggered — by the user, by Claude, or both
Slash command
/uno-platform-studio:uno-mvux-listfeedWhen to use
Use when loading a list of items from a service or API, displaying collections in `ListView`, `GridView`, or `ItemsRepeater`, filtering list data reactively, or choosing between `IListFeed<T>` (read-only) and `IListState<T>` (mutable).
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Docs lookup:** call `uno_platform_docs_search(...)` first, then `uno_platform_docs_fetch(sourcePath="…")` using the `sourcePath` field from a result (a relative `.md` path; add the result's `anchor` for a section). Never pass a URL, a `.html` link, or a hand-built path.
Applies C++ Core Guidelines to write, review, or refactor C++ code. Enforces modern, safe, and idiomatic practices for C++17/20/23.
Share bugs, ideas, or general feedback.
Docs lookup: call
uno_platform_docs_search(...)first, thenuno_platform_docs_fetch(sourcePath="…")using thesourcePathfield from a result (a relative.mdpath; add the result'sanchorfor a section). Never pass a URL, a.htmllink, or a hand-built path.
Search for and fetch the documentation:
uno_platform_docs_search("MVUX ListFeed reactive collection IListFeed")
Primary documentation pages:
external/uno.extensions/doc/Reference/Reactive/listfeed.mdexternal/uno.extensions/doc/Learn/Mvux/Walkthrough/ListFeed.howto.mdFetch the full reference:
uno_platform_docs_fetch(sourcePath="external/uno.extensions/doc/Reference/Reactive/listfeed.md")
From the fetched docs, the key factory methods on the ListFeed static class:
ListFeed.Async(...) — from a method returning Task<IImmutableList<T>>ListFeed.AsyncEnumerable(...) — from an IAsyncEnumerable<IImmutableList<T>>ListFeed.PaginatedAsync(...) — for paginated/infinite scroll (see uno-mvux-pagination skill)The reference page covers operators like Where, Select, and AsFeed. These operate on individual items in the collection.
For step-by-step examples:
uno_platform_docs_fetch(sourcePath="external/uno.extensions/doc/Learn/Mvux/Walkthrough/ListFeed.howto.md")
This covers loading a list, showing it with FeedView, filtering with Where, and when to use feeds vs states.
The how-to page shows how to bind IListFeed<T> to ListView via FeedView and access items through {Binding Data}.
IListFeed<T> is read-only — use IListState<T> for add/remove/updateValueTask<IImmutableList<T>> (from System.Collections.Immutable)Where and Select work on individual items, not the list itselfIListFeed<T> when data is pulled from a service and is read-onlyIListState<T> when you need to edit the collection client-sideAll item types used in IListFeed<T> MUST support key equality via Uno.Extensions.Equality.IKeyEquatable<T>. Without key equality, MVUX cannot distinguish between a modified entity and a completely different one, causing full list re-renders instead of granular item updates (flickering, lost scroll position, broken animations).
For partial record types, key equality is auto-generated when the record has a property named Id or Key:
public partial record Person(Guid Id, string Name, int Age);
// IKeyEquatable<Person> is generated automatically — Id is the key
Use [Key] attribute when the key property has a different name, or for composite keys:
public partial record OrderLine(
[property: Key] Guid OrderId,
[property: Key] int LineNumber,
string Product,
decimal Price);
Either Uno.Extensions.Equality.KeyAttribute or System.ComponentModel.DataAnnotations.KeyAttribute can be used.
Configure which property names are auto-detected as keys:
[assembly: ImplicitKeyEquality("Id", "Key", "EntityId")]
If auto-generation causes issues on a specific type:
[ImplicitKeys(IsEnabled = false)]
public partial record MyItem(Guid Id, string Name);
partial record (or manually implement IKeyEquatable<T>)KeyEquals returns true when two instances represent the same entity, even if other properties differ