{"id":27273556,"url":"https://github.com/insire/mvvmscarlettoolkit","last_synced_at":"2025-04-11T14:58:29.716Z","repository":{"id":14021361,"uuid":"66717085","full_name":"Insire/MvvmScarletToolkit","owner":"Insire","description":"MvvmScarletToolkit is a personal project and framework to speed up the development process of xaml based applications using the viewmodel first approach","archived":false,"fork":false,"pushed_at":"2024-05-09T07:32:42.000Z","size":17815,"stargazers_count":32,"open_issues_count":15,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-09T22:27:55.330Z","etag":null,"topics":["async","csharp","mvvm","mvvm-pattern","viewmodel","viewmodel-first","wpf","xamarin-forms"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Insire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2016-08-27T13:58:24.000Z","updated_at":"2024-05-09T09:33:24.000Z","dependencies_parsed_at":"2024-12-07T20:24:29.695Z","dependency_job_id":"f8b7f20f-94fc-4a0d-95b1-8b98dfb07634","html_url":"https://github.com/Insire/MvvmScarletToolkit","commit_stats":{"total_commits":928,"total_committers":8,"mean_commits":116.0,"dds":"0.40840517241379315","last_synced_commit":"fca0ff8aefbee7a94be652462d6073695c470e4e"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insire%2FMvvmScarletToolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insire%2FMvvmScarletToolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insire%2FMvvmScarletToolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Insire%2FMvvmScarletToolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Insire","download_url":"https://codeload.github.com/Insire/MvvmScarletToolkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248427808,"owners_count":21101772,"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":["async","csharp","mvvm","mvvm-pattern","viewmodel","viewmodel-first","wpf","xamarin-forms"],"created_at":"2025-04-11T14:58:28.816Z","updated_at":"2025-04-11T14:58:29.705Z","avatar_url":"https://github.com/Insire.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MvvmScarletToolkit\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/Insire/MvvmScarletToolkit/blob/master/license.md)\n[![NuGet](https://img.shields.io/nuget/v/MvvmScarletToolkit.svg?style=flat-square\u0026label=nuget)](https://www.nuget.org/packages/MvvmScarletToolkit/)\n[![Build status](https://dev.azure.com/SoftThorn/MvvmScarletToolkit/_apis/build/status/MvvmScarletToolkit-CD)](https://dev.azure.com/SoftThorn/MvvmScarletToolkit/_build/latest?definitionId=1)\n[![CodeFactor](https://www.codefactor.io/repository/github/insire/mvvmscarlettoolkit/badge)](https://www.codefactor.io/repository/github/insire/mvvmscarlettoolkit)\n[![codecov](https://codecov.io/gh/Insire/MvvmScarletToolkit/branch/master/graph/badge.svg)](https://codecov.io/gh/Insire/MvvmScarletToolkit)\n\nMvvmScarletToolkit provides classes to speedup the MVVM development process for xaml-based applications using the viewmodel first approach.\n\nPre release nuget packages are available [here](https://pkgs.dev.azure.com/SoftThorn/_packaging/SoftThorn/nuget/v3/index.json) and on [github](https://github.com/Insire/MvvmScarletToolkit/packages).\n\n## Features\n\n- [MvvmScarletToolkit.Commands](src/MvvmScarletToolkit.Commands/readme.md)\n\n  - fluent interface to build task based icommands\n    - cancellation support\n    - limiting command execution to one per instance at any given time\n    - state management and notification\n\n- [MvvmScarletToolkit.Observables](src/MvvmScarletToolkit.Observables/readme.md)\n\n  - INotifyPropertyChanged base classes for single instance viewmodels and collection viewmodels\n  - Localization ViewModels (switching language without app restart)\n  - Threadsafe busy state notifications via IBusyStack interface\n  - ChangeTracker based on INotifyPropertyChanged\n  - ChangeTracker based on PropertyChangedMessage\\\u003cT\u003e (from CommunityToolkit.Mvvm)\n  - Helper viewmodels for\n    - paging\n    - enums\n    - binding to structs and value types\n    - basic versioning/change tracking\n    - navigation\n\n- [MvvmScarletToolkit.Wpf](src/MvvmScarletToolkit.Wpf/readme.md)\n\n  - BindingProxy\n  - Features\n    - Support for * Sizing in GridViews\n    - Support for providing an explicit list of datatemplates for a datatemplate selector\n    - Support for managing groupings from an ICollectionView\n    - Support for loading a System.Drawing.Bitmap into a BitmapSource without copying its data\n  - Attached Properties\n    - Filter\n      - binding ICollectionView.Filter\n      - refresh ICollectionView on property change\n    - Focus\n      - set focus on window load\n  - TriggerActions\n    - ClearPasswordBoxAction\n    - ClearTextBoxAction\n  - Behaviors\n    - MultiSelectionBehavior: bind MultiSelector.SelectedItems (for DataGrid)\n    - MultiListBoxSelectionBehavior: bind ListBx.SelectedItems\n    - SelectedTreeViewItemBehavior: bind SelectedItem for TreeView\n    - PasswordBindingBehavior: bind PasswordBox.Password\n    - WatermarkBehavior for TextBoxes\n    - AutoRepositionPopupBehavior\n    - LaunchNavigateUriAsNewProcessBehavior: Launch Hyperlink.NavigateUri in a new Process\n    - ScrollSelectionIntoViewBehavior: scroll SelectedItem into View for DataGrid and ListBox\n    - ScrollToEndCommandBehavior: execute a command, when a scrollviewer has been scrolled to its vertical or horizontal end\n    - AutoScrollBehavior: auto scrolling for Selector (e.g. ListBox and DataGrid)\n    - AllowableCharactersTextBoxBehavior: control the types of charachters allowed to be written into a TextBox\n  - Controls\n    - FileSystemBrowser\n    - VirtualizingTilePanel\n    - VirtualizingWrapPanel\n  - (Multi-)Converters as Markupextension\n    - ToCase (convert a string to a given casing)\n    - SmallerThan (whether a bound number is smaller than the converter value)\n    - GreaterThan (whether a bound number is larger than the converter value)\n    - IsNot (negate a boolean)\n    - IsNotNull (return whether something is not null)\n    - IsNotNullOrEmpty (return whether a string is not null or empty)\n    - IsNotNullOrWhiteSpace (return whether a string is not null or whitespace)\n    - IsNull (return whether something is null)\n    - IsNullOrEmpty (return whether a string is null or empty)\n    - IsNullOrWhiteSpace (return whether a string is null or whitespace)\n    - DebugConverter (log bound values and value changes to the Debug.Listener)\n    - InvertBooleanToVisibilityConverter (negate a boolean to visibility)\n    - RadioButtonCheckedConverter (compares the bound value to the argument and returns whether they are equal)\n    - MultiBooleanAndConverter (combines all conditions with logical and)\n  - MarkupExtensions\n    - ConverterMarkupExtension\n    - MultiConverterMarkupExtension\n    - EnumBindingSourceExtension (create an itemsource from an enum type)\n    - StartProcessExtension (let the OS open an uri)\n  - Extensions\n    - DependencyObjectExtensions\n\n- [MvvmScarletToolkit.Abstractions](src/MvvmScarletToolkit.Abstractions/readme.md)\n\n  - EnumerableExtensions\n  - ListExtensions\n  - EnumExtensions\n  - TypeExtensions\n  - EventExtensions\n\n- MvvmScarletToolkit.Wpf.Samples (for WPF)\n\n  - simple navigation\n  - master detail view\n  - async cancelable commands using ICommand\n  - simple file/folder browser\n  - barebones drag and drop example\n  - an implementation of IProgress (e.g for a progressbar) to send any amount of updates without locking   up the UI thread\n  - stress test for rendering lots of charachters converted to geometry objects\n  - a passwordbox with binding support\n  - watermark support for textboxes (custom watermark style included)\n  - easy grouping for bound datagrids\n  - clear button for textboxes\n\n## Build Requirements\n\nThis library uses SDK-style project files, which means you are required to use [Visual Studio 2019](https://visualstudio.microsoft.com/vs/community/) or newer. Visual Studio will prompt you to install any missing components once you open the [sln](./MvvmScarletToolkit.sln) file.\n\nFor anyone not wishing to install that, they atleast need:\n\n- Windows 10 (older versions work probably too, but the repository is not configured for those)\n- [Net 6.0](https://dotnet.microsoft.com/download/dotnet-core/6.0)\n- [Net 7.0](https://dotnet.microsoft.com/download/dotnet-core/7.0)\n- [Net 8.0](https://dotnet.microsoft.com/download/dotnet-core/8.0)\n- [Visual Studio Code](https://code.visualstudio.com/) with the [C# Extension](https://github.com/OmniSharp/omnisharp-vscode) provided by Microsoft\n- [git](https://git-scm.com/)\n\n(This should be everything, but it's possible i missed something. So please tell me if that's the case.)\n\n### TODO\n\n- finalize basic FileSystemBrowser\n- add more tests\n- improve documentation\n- add a nice icon for this lib\n- add Contribution guidelines\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsire%2Fmvvmscarlettoolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsire%2Fmvvmscarlettoolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsire%2Fmvvmscarlettoolkit/lists"}