KEMBAR78
Add Collapse Support to ListViewGroup · Issue #3067 · dotnet/winforms · GitHub
Skip to content

Add Collapse Support to ListViewGroup #3067

@lonitra

Description

@lonitra

Is your feature request related to a problem? Please describe.

As of now, there's not an option for a user to hide items under a ListViewGroup that they aren't interested in seeing at the time, similar to what windows like File Explorer provide. This could result in endless scrolling if there are many ListViewGroups and many items under each group. As #2623 suggested, a collapsible/collapse property would be a nice touch to give users flexibility and can especially be useful for clutter management purposes.

Describe the solution you'd like

Add the ability for users to make items in a group collapsible.

API:

public class ListViewGroup 
{
    public bool Collapsible { get; set; }
    public bool Collapsed { get; set; }
}

Example:

var lvGroup = new ListViewGroup 
{
    Collapsible = true,
    Collapsed = false
};

An excellent visualization of what this might look like from the original issue:
image

Will this feature affect UI controls?

Yes.

Will VS Designer need to support the feature?
It would be nice. I would imagine the Designer would have an area carved out in the ListViewGroup Collection Editor where Collapsible/Collapsed can be toggled. Something like so:
designerex

I also imagine that the changes would immediately visible to the user in the designer, again similar to what is shown in the original issue.

What impact will it have on accessibility?
I'm not quite sure here.

Will this feature need to be localized or be localizable?
Aside from some work relating to accessibility namely perhaps what a talkback would use to describe the property, no I do not think this needs to be localized/localizable.


Update
After implementing Collapsible/Collapsed property for ListViewGroup as done so in #3155 , we realize that this will be an issue with the design-time serializer, which orders properties assignment statement alphabetically. This means that Collapsed will come before Collapsible.
Suppose a user wanted to set the properties like so in designer:
image
The serializer will generate:

this.listViewGroup1.Collapsed = true;
this.listViewGroup1.Collapsible = true;

Since Collapsed is no-op when Collapsible = false (which is the default), the end result will be Collapsed = false and Collapsible = true , not what the user intended.

Suggestion
Upon discussion with the team, we came to the idea to merge the two properties into one. The new API will be as follows:

public class ListViewGroup 
{
    public enum ListViewGroupCollapsedState 
    {
        DEFAULT,
        EXPANDED,
        COLLAPSED
    }

    public ListViewGroupCollasedState CollapsedState { get; set; }
}

Metadata

Metadata

Assignees

Labels

api-approved(4) API was approved in API review, it can be implementedapi-suggestion(1) Early API idea and discussion, it is NOT ready for implementation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions