{"id":17175890,"url":"https://github.com/robinrodricks/fluentlistview","last_synced_at":"2025-07-15T07:37:54.649Z","repository":{"id":66331394,"uuid":"174088964","full_name":"robinrodricks/FluentListView","owner":"robinrodricks","description":"FluentListView is a C# wrapper around a .NET ListView, supporting model-bound lists, in-place item editing, drag and drop, icons, themes, trees \u0026 data grids, and much more. This is a fork of ObjectListView with a focus on performance.","archived":false,"fork":false,"pushed_at":"2024-09-07T10:47:42.000Z","size":4379,"stargazers_count":66,"open_issues_count":1,"forks_count":20,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-09T13:57:54.817Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robinrodricks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-06T06:53:40.000Z","updated_at":"2025-06-30T08:53:51.000Z","dependencies_parsed_at":"2024-11-07T17:01:10.298Z","dependency_job_id":"be390097-724b-4f8e-bf8a-d9ee0abd92fe","html_url":"https://github.com/robinrodricks/FluentListView","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/robinrodricks/FluentListView","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinrodricks%2FFluentListView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinrodricks%2FFluentListView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinrodricks%2FFluentListView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinrodricks%2FFluentListView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robinrodricks","download_url":"https://codeload.github.com/robinrodricks/FluentListView/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinrodricks%2FFluentListView/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265418485,"owners_count":23761817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T23:58:06.795Z","updated_at":"2025-07-15T07:37:54.620Z","avatar_url":"https://github.com/robinrodricks.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FluentListView\n\n[![Version](https://img.shields.io/nuget/vpre/FluentListView.svg)](https://www.nuget.org/packages/FluentListView)\n[![Downloads](https://img.shields.io/nuget/dt/FluentListView.svg)](https://www.nuget.org/packages/FluentListView)\n[![GitHub contributors](https://img.shields.io/github/contributors/robinrodricks/FluentListView.svg)](https://github.com/robinrodricks/FluentListView/graphs/contributors)\n[![Codacy grade](https://img.shields.io/codacy/grade/ed7975b8682c452fb37e0b7ad6566c14.svg)](https://app.codacy.com/project/robinrodricks/FluentListView/dashboard)\n[![License](https://img.shields.io/github/license/robinrodricks/FluentListView.svg)](https://github.com/robinrodricks/FluentListView/blob/master/LICENSE)\n\nFluentListView is a C# wrapper around a .NET ListView, supporting model-bound lists, in-place item editing, drag and drop, icons, themes, trees \u0026 data grids, and much more.\n\nUpdated to support .NET 7+ (Windows only) and .NET Framework support has been dropped.\n\nHere is an example of what your FluentListView can look like:\n\n![_images/fancy-screenshot2.png](_images/fancy-screenshot2.png)\n\nAdd graphics, buttons and descriptions to make your application come to life:\n\n![_images/described-task1.png](_images/described-task1.png)\n\n\n## How it works\n\nFluentListView is designed to view a list of strongly-typed objects. You don't need to create `ListItem` objects, you just feed it your list and everything is handled internally.\n\nIt extracts certain properties from your objects, converts those properties to strings, and then displays those as list items.\n\n\u0026nbsp;\n\n![_images/ModelToScreenProcess.png](_images/ModelToScreenProcess.png)\n\n*Diagram copyrighted © 2006-2019 by Phillip Piper. All credits go to Phillip Piper for creating the original [ObjectListView](http://objectlistview.sourceforge.net/).*\n\n## Example\n\nFor example, let's define an object to hold the metadata of a file.\n\n```cs\n// define our list item class\npublic class FileObject {\n\tpublic string Name;\n\tpublic string Path;\n\tpublic DateTime DateCreated;\n\tpublic DateTime DateModified;\n}\n```\n\nWe can then use FluentListView to display these file objects. We'll also allow users to drag-and-drop files from Explorer into the list.\n\n```cs\nusing Fluent;\nusing System.Windows.Forms;\nusing System.Drawing;\n\n\n// create a list and add it into the form\nvar list = new FluentListView();\nform.Controls.Add(list);\n\n\n// set basic visual properties\nlist.Size = new Size(800, 200);\nlist.Theme = OLVTheme.VistaExplorer;\nlist.ItemFont = new Font(\"Segoe UI\", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 0);\n\n\n// display the the file name as the list item label\nlist.Properties.Name = \"Name\";\n\n\n// display some more properties from our objects as columns\nlist.ShowColumns = true;\nlist.Properties.Columns = new List\u003cstring\u003e     { \"DateCreated\",  \"DateModified\",  \"FullPath\"  };\nlist.Properties.ColumnNames = new List\u003cstring\u003e { \"Date Created\", \"Date Modified\", \"Full Path\" };\n\n\n// set the default items\nlist.Items = new List\u003cFileObject\u003e();\n\n\n// enable drag-and-drop files from Explorer\nlist.EnableDropFiles = true;\nlist.EnableDropOnLocations = DropTargetLocation.Background | DropTargetLocation.Item;\nlist.OnDroppedFiles = delegate (List\u003cstring\u003e paths) {\n\tpaths.ForEach(path =\u003e {\n\t\n\t\t// add the file to the list\n\t\tvar item = new FileObject {\n\t\t\tName = Path.GetFileName(path),\n\t\t\tPath = path,\n\t\t\tDateCreated = File.GetCreationTime(path),\n\t\t\tDateModified = File.GetLastWriteTime(path),\n\t\t};\n\t\t\n\t\t// quickly add the list item to the view\n\t\tlist.AddItem(item);\n\t});\n};\n```\n\nYou can later get info about the list items and selection.\n\n```cs\n// get the currently displayed items\nvar currentItems = ((List\u003cFileObject\u003e)list.Items);\n\n// get the currently selected items\nvar selectedItems = list.SelectedItems.ToList\u003cFileObject\u003e();\n```\n\n## Basic API\n\n- list.**Properties** - Which properties of your objects to display on the view.\n   \n   - list.**Properties.Name** - Which object property to display as the list item label. The property can be of any type.\n   \n   - list.**Properties.Icon** - Which object property to display as the icon. It must be a `Icon` or `Bitmap` property.\n   \n   - list.**Properties.Description** - Which object property to display as the description, just below the item label. The property can be of any type.\n   \n   - list.**Properties.Columns** - Which object properties to display as additional columns. The properties can be of any type.\n   \n   - list.**Properties.ColumnNames** - Friendly names to display as the column headers. Must be the same length as `Properties.Columns`. If you don't specify this, the `Properties.Columns` list is displayed as the column headers instead.\n\n- list.**Items** - The items that are bound to this list. Set this to your list of objects. You only need to set this once. When adding and removing a single item, please call `AddItem` and `RemoveItem`. If modify this list directly, call `Redraw` to update the view.\n\n- list.**Theme** - Which visual theme to use to render items.\n\n- list.**ItemFont** - The font used to display list items. Affects row height.\n\n- list.**InnerList** - Gets the underlying AdvancedListView or FastListView UI control.\n\n- list.**SelectedItem** - Gets or sets the selected item. Setting this property automatically scrolls to the item and highlights it.\n\n- list.**SelectedItems** - Gets or sets the selected items. Setting this property highlights all the given items.\n\n\n## Drag and Drop API\n\n- list.**EnableDragDropItems** - Whether the list will use a SimpleDragSource to initiate drags.\n\n- list.**EnableDrop** - Whether the list will use a SimpleDropSink to accept dropping items from other sources.\n\n- list.**EnableDropFiles** - Whether the list will accept dropping of files from Explorer. You need to handle `OnDroppedFiles`.\n\n- list.**EnableDropOnLocations** - You need to set this if you are using drag or drag-drop.\n\n- list.**OnCanDrop** - You need to set this if you are using EnableDragDropItems or EnableDrop, but not if you are using EnableDropFiles.\n\n- list.**OnDropped** - You need to set this if you are using EnableDragDropItems or EnableDrop, but not if you are using EnableDropFiles.\n\n- list.**OnDroppedFiles** - You need to set this if you are using EnableDropFiles.\n\n\n## Columns API\n\n- list.**ShowColumns** - Used to control if additional columns are displayed based on `list.Properties.Columns`.\n\n- list.**ColumnWidth** - The width of additional columns.\n\n\n## Advanced API\n\nFluentListView objects are a light-weight wrapper over `AdvancedListView` and `FastListView`. We needed to use the wrapper pattern because the underlying list is created depending on the features you enable. In most cases a `FastListView` suffices, but if certain advanced features are used we create a `AdvancedListView`. This gives you better performance in most use cases. A wrapper also allows us to expose a simpler and more out-of-the-box API.\n\nYou can also directly modify the underlying [AdvancedListView](https://github.com/robinrodricks/FluentListView/blob/master/ADVANCED.md) if you need these:\n\n*  Sorting and grouping rows.\n*  Editing cell values.\n*  Other views (report, list, large and small icons).\n*  Owner drawing, rendering animated graphics and images stored in a database.\n*  Display a “list is empty” message.\n*  Fancy tooltips for cells and headers.\n*  Buttons in cells.\n*  Checkboxes in any column as well as tri-state checkboxes.\n*  [And much more...](https://github.com/robinrodricks/FluentListView/blob/master/ADVANCED.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinrodricks%2Ffluentlistview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobinrodricks%2Ffluentlistview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinrodricks%2Ffluentlistview/lists"}