├── .git-blame-ignore-revs ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── README.md ├── azure-pipelines.yml ├── license.md └── samples ├── Directory.Build.props ├── Directory.Build.targets ├── MvvmSample.Core ├── Helpers │ └── MarkdownHelper.cs ├── Models │ ├── Contact.cs │ └── Post.cs ├── MvvmSample.Core.csproj ├── Properties │ └── System.Runtime.CompilerServices │ │ └── IsExternalInit.cs ├── Services │ ├── IContactsService.cs │ ├── IDialogService.cs │ ├── IFileService.cs │ ├── IRedditService.cs │ └── ISettingsService.cs └── ViewModels │ ├── AsyncRelayCommandPageViewModel.cs │ ├── CollectionsPageViewModel.cs │ ├── IocPageViewModel.cs │ ├── MessengerPageViewModel.cs │ ├── ObservableObjectPageViewModel.cs │ ├── ObservableValidatorPageViewModel.cs │ ├── RelayCommandPageViewModel.cs │ ├── SamplePageViewModel.cs │ └── Widgets │ ├── ContactsListWidgetViewModel.cs │ ├── PostWidgetViewModel.cs │ ├── SubredditWidgetViewModel.cs │ └── ValidationFormWidgetViewModel.cs ├── MvvmSampleMAUI.sln ├── MvvmSampleMAUI ├── App.xaml ├── App.xaml.cs ├── AppShell.xaml ├── AppShell.xaml.cs ├── Controls │ ├── FlyoutHeader.xaml │ ├── FlyoutHeader.xaml.cs │ ├── InteractiveSample.xaml │ └── InteractiveSample.xaml.cs ├── Converters │ ├── IsSelfPostToWidthRequestConverter.cs │ └── TaskResultConverter.cs ├── MauiProgram.cs ├── MvvmSampleMAUI.csproj ├── Platforms │ ├── Android │ │ ├── AndroidManifest.xml │ │ ├── MainActivity.cs │ │ ├── MainApplication.cs │ │ └── Resources │ │ │ └── values │ │ │ └── colors.xml │ ├── MacCatalyst │ │ ├── AppDelegate.cs │ │ ├── Entitlements.plist │ │ ├── Info.plist │ │ └── Program.cs │ ├── Tizen │ │ ├── Main.cs │ │ └── tizen-manifest.xml │ ├── Windows │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Package.appxmanifest │ │ └── app.manifest │ └── iOS │ │ ├── AppDelegate.cs │ │ ├── Info.plist │ │ ├── Program.cs │ │ └── Resources │ │ └── PrivacyInfo.xcprivacy ├── Properties │ └── launchSettings.json ├── Resources │ ├── AppIcon │ │ ├── appicon.svg │ │ └── appiconfg.svg │ ├── AppResources.cs │ ├── Fonts │ │ ├── FontAwesomeBrands.otf │ │ ├── FontAwesomeRegular.otf │ │ ├── FontAwesomeSolid.otf │ │ ├── OpenSans-Regular.ttf │ │ └── OpenSans-Semibold.ttf │ ├── Images │ │ └── dotnet_bot.png │ ├── Raw │ │ └── AboutAssets.txt │ ├── Splash │ │ └── splash.svg │ └── Styles │ │ ├── Colors.xaml │ │ └── Styles.xaml ├── Services │ ├── FileService.cs │ └── SettingsService.cs └── Views │ ├── AsyncRelayCommandPage.xaml │ ├── AsyncRelayCommandPage.xaml.cs │ ├── BaseContentPage.cs │ ├── BuildingTheUIPage.xaml │ ├── BuildingTheUIPage.xaml.cs │ ├── IntroductionPage.xaml │ ├── IntroductionPage.xaml.cs │ ├── IoCPage.xaml │ ├── IoCPage.xaml.cs │ ├── MessengerPage.xaml │ ├── MessengerPage.xaml.cs │ ├── MessengerRequestPage.xaml │ ├── MessengerRequestPage.xaml.cs │ ├── MessengerSendPage.xaml │ ├── MessengerSendPage.xaml.cs │ ├── ObservableObjectPage.xaml │ ├── ObservableObjectPage.xaml.cs │ ├── PuttingThingsTogetherPage.xaml │ ├── PuttingThingsTogetherPage.xaml.cs │ ├── RedditBrowserPage.xaml │ ├── RedditBrowserPage.xaml.cs │ ├── RedditServicePage.xaml │ ├── RedditServicePage.xaml.cs │ ├── RelayCommandPage.xaml │ ├── RelayCommandPage.xaml.cs │ ├── SettingUpTheViewModelsPage.xaml │ ├── SettingUpTheViewModelsPage.xaml.cs │ ├── SettingsServicePage.xaml │ ├── SettingsServicePage.xaml.cs │ └── Widgets │ ├── BaseContentView.cs │ ├── PostWidget.xaml │ ├── PostWidget.xaml.cs │ ├── SubredditWidget.xaml │ └── SubredditWidget.xaml.cs ├── MvvmSampleUwp.sln ├── MvvmSampleUwp ├── App.xaml ├── App.xaml.cs ├── Assets │ ├── Icon │ │ ├── AppIcon.scale-100.png │ │ ├── AppIcon.scale-125.png │ │ ├── AppIcon.scale-150.png │ │ ├── AppIcon.scale-200.png │ │ ├── AppIcon.scale-400.png │ │ ├── AppList.scale-100.png │ │ ├── AppList.scale-100_altform-colorful_theme-light.png │ │ ├── AppList.scale-125.png │ │ ├── AppList.scale-125_altform-colorful_theme-light.png │ │ ├── AppList.scale-150.png │ │ ├── AppList.scale-150_altform-colorful_theme-light.png │ │ ├── AppList.scale-200.png │ │ ├── AppList.scale-200_altform-colorful_theme-light.png │ │ ├── AppList.scale-400.png │ │ ├── AppList.scale-400_altform-colorful_theme-light.png │ │ ├── AppList.targetsize-16.png │ │ ├── AppList.targetsize-16_altform-lightunplated.png │ │ ├── AppList.targetsize-16_altform-unplated.png │ │ ├── AppList.targetsize-20.png │ │ ├── AppList.targetsize-20_altform-lightunplated.png │ │ ├── AppList.targetsize-20_altform-unplated.png │ │ ├── AppList.targetsize-24.png │ │ ├── AppList.targetsize-24_altform-lightunplated.png │ │ ├── AppList.targetsize-24_altform-unplated.png │ │ ├── AppList.targetsize-256.png │ │ ├── AppList.targetsize-256_altform-lightunplated.png │ │ ├── AppList.targetsize-256_altform-unplated.png │ │ ├── AppList.targetsize-30.png │ │ ├── AppList.targetsize-30_altform-lightunplated.png │ │ ├── AppList.targetsize-30_altform-unplated.png │ │ ├── AppList.targetsize-32.png │ │ ├── AppList.targetsize-32_altform-lightunplated.png │ │ ├── AppList.targetsize-32_altform-unplated.png │ │ ├── AppList.targetsize-36.png │ │ ├── AppList.targetsize-36_altform-lightunplated.png │ │ ├── AppList.targetsize-36_altform-unplated.png │ │ ├── AppList.targetsize-40.png │ │ ├── AppList.targetsize-40_altform-lightunplated.png │ │ ├── AppList.targetsize-40_altform-unplated.png │ │ ├── AppList.targetsize-48.png │ │ ├── AppList.targetsize-48_altform-lightunplated.png │ │ ├── AppList.targetsize-48_altform-unplated.png │ │ ├── AppList.targetsize-56.png │ │ ├── AppList.targetsize-56_altform-lightunplated.png │ │ ├── AppList.targetsize-56_altform-unplated.png │ │ ├── AppList.targetsize-60.png │ │ ├── AppList.targetsize-60_altform-lightunplated.png │ │ ├── AppList.targetsize-60_altform-unplated.png │ │ ├── AppList.targetsize-64.png │ │ ├── AppList.targetsize-64_altform-lightunplated.png │ │ ├── AppList.targetsize-64_altform-unplated.png │ │ ├── AppList.targetsize-72.png │ │ ├── AppList.targetsize-72_altform-lightunplated.png │ │ ├── AppList.targetsize-72_altform-unplated.png │ │ ├── AppList.targetsize-80.png │ │ ├── AppList.targetsize-80_altform-lightunplated.png │ │ ├── AppList.targetsize-80_altform-unplated.png │ │ ├── AppList.targetsize-96.png │ │ ├── AppList.targetsize-96_altform-lightunplated.png │ │ ├── AppList.targetsize-96_altform-unplated.png │ │ ├── LargeTile.scale-100.png │ │ ├── LargeTile.scale-100_altform-colorful_theme-light.png │ │ ├── LargeTile.scale-125.png │ │ ├── LargeTile.scale-125_altform-colorful_theme-light.png │ │ ├── LargeTile.scale-150.png │ │ ├── LargeTile.scale-150_altform-colorful_theme-light.png │ │ ├── LargeTile.scale-200.png │ │ ├── LargeTile.scale-200_altform-colorful_theme-light.png │ │ ├── LargeTile.scale-400.png │ │ ├── LargeTile.scale-400_altform-colorful_theme-light.png │ │ ├── MedTile.scale-100.png │ │ ├── MedTile.scale-100_altform-colorful_theme-light.png │ │ ├── MedTile.scale-125.png │ │ ├── MedTile.scale-125_altform-colorful_theme-light.png │ │ ├── MedTile.scale-150.png │ │ ├── MedTile.scale-150_altform-colorful_theme-light.png │ │ ├── MedTile.scale-200.png │ │ ├── MedTile.scale-200_altform-colorful_theme-light.png │ │ ├── MedTile.scale-400.png │ │ ├── MedTile.scale-400_altform-colorful_theme-light.png │ │ ├── SmallTile.scale-100.png │ │ ├── SmallTile.scale-100_altform-colorful_theme-light.png │ │ ├── SmallTile.scale-125.png │ │ ├── SmallTile.scale-125_altform-colorful_theme-light.png │ │ ├── SmallTile.scale-150.png │ │ ├── SmallTile.scale-150_altform-colorful_theme-light.png │ │ ├── SmallTile.scale-200.png │ │ ├── SmallTile.scale-200_altform-colorful_theme-light.png │ │ ├── SmallTile.scale-400.png │ │ ├── SmallTile.scale-400_altform-colorful_theme-light.png │ │ ├── SplashScreen.scale-100.png │ │ ├── SplashScreen.scale-100_altform-colorful_theme-dark.png │ │ ├── SplashScreen.scale-100_altform-colorful_theme-light.png │ │ ├── SplashScreen.scale-125.png │ │ ├── SplashScreen.scale-125_altform-colorful_theme-dark.png │ │ ├── SplashScreen.scale-125_altform-colorful_theme-light.png │ │ ├── SplashScreen.scale-150.png │ │ ├── SplashScreen.scale-150_altform-colorful_theme-dark.png │ │ ├── SplashScreen.scale-150_altform-colorful_theme-light.png │ │ ├── SplashScreen.scale-200.png │ │ ├── SplashScreen.scale-200_altform-colorful_theme-dark.png │ │ ├── SplashScreen.scale-200_altform-colorful_theme-light.png │ │ ├── SplashScreen.scale-400.png │ │ ├── SplashScreen.scale-400_altform-colorful_theme-dark.png │ │ ├── SplashScreen.scale-400_altform-colorful_theme-light.png │ │ ├── StoreDisplay-150.png │ │ ├── StoreDisplay-300.png │ │ ├── StoreDisplay-71.png │ │ ├── StoreLogo.scale-100.png │ │ ├── StoreLogo.scale-100_altform-colorful_theme-light.png │ │ ├── StoreLogo.scale-125.png │ │ ├── StoreLogo.scale-125_altform-colorful_theme-light.png │ │ ├── StoreLogo.scale-150.png │ │ ├── StoreLogo.scale-150_altform-colorful_theme-light.png │ │ ├── StoreLogo.scale-200.png │ │ ├── StoreLogo.scale-200_altform-colorful_theme-light.png │ │ ├── StoreLogo.scale-400.png │ │ ├── StoreLogo.scale-400_altform-colorful_theme-light.png │ │ ├── WideTile.scale-100.png │ │ ├── WideTile.scale-100_altform-colorful_theme-light.png │ │ ├── WideTile.scale-125.png │ │ ├── WideTile.scale-125_altform-colorful_theme-light.png │ │ ├── WideTile.scale-150.png │ │ ├── WideTile.scale-150_altform-colorful_theme-light.png │ │ ├── WideTile.scale-200.png │ │ ├── WideTile.scale-200_altform-colorful_theme-light.png │ │ ├── WideTile.scale-400.png │ │ └── WideTile.scale-400_altform-colorful_theme-light.png │ └── StoreLogo.backup.png ├── Controls │ ├── DocumentationBlock.cs │ ├── DocumentationBlock.xaml │ ├── InteractiveSample.cs │ ├── InteractiveSample.xaml │ ├── ValidationTextBox.cs │ └── ValidationTextBox.xaml ├── Converters │ └── TaskResultConverter.cs ├── Helpers │ └── TitleBarHelper.cs ├── MvvmSampleUwp.csproj ├── Package.appxmanifest ├── Properties │ ├── AssemblyInfo.cs │ └── Default.rd.xml ├── Services │ ├── DialogService.cs │ ├── FileService.cs │ └── SettingsService.cs ├── Shell.xaml ├── Shell.xaml.cs └── Views │ ├── AsyncRelayCommandPage.xaml │ ├── AsyncRelayCommandPage.xaml.cs │ ├── BuildingTheUIPage.xaml │ ├── BuildingTheUIPage.xaml.cs │ ├── CollectionsPage.xaml │ ├── CollectionsPage.xaml.cs │ ├── INotifyPropertyChangedAttributePage.xaml │ ├── INotifyPropertyChangedAttributePage.xaml.cs │ ├── IntroductionPage.xaml │ ├── IntroductionPage.xaml.cs │ ├── IocPage.xaml │ ├── IocPage.xaml.cs │ ├── MessengerPage.xaml │ ├── MessengerPage.xaml.cs │ ├── MessengerRequestPage.xaml │ ├── MessengerRequestPage.xaml.cs │ ├── MessengerSendPage.xaml │ ├── MessengerSendPage.xaml.cs │ ├── ObservableObjectPage.xaml │ ├── ObservableObjectPage.xaml.cs │ ├── ObservablePropertyAttributePage.xaml │ ├── ObservablePropertyAttributePage.xaml.cs │ ├── ObservableValidatorPage.xaml │ ├── ObservableValidatorPage.xaml.cs │ ├── PuttingThingsTogetherPage.xaml │ ├── PuttingThingsTogetherPage.xaml.cs │ ├── RedditBrowserPage.xaml │ ├── RedditBrowserPage.xaml.cs │ ├── RedditServicePage.xaml │ ├── RedditServicePage.xaml.cs │ ├── RelayCommandAttributePage.xaml │ ├── RelayCommandAttributePage.xaml.cs │ ├── RelayCommandPage.xaml │ ├── RelayCommandPage.xaml.cs │ ├── SettingUpTheViewModelsPage.xaml │ ├── SettingUpTheViewModelsPage.xaml.cs │ ├── SettingsServicePage.xaml │ ├── SettingsServicePage.xaml.cs │ ├── SourceGeneratorsPage.xaml │ ├── SourceGeneratorsPage.xaml.cs │ └── Widgets │ ├── ContactsListWidget.xaml │ ├── ContactsListWidget.xaml.cs │ ├── PostWidget.xaml │ ├── PostWidget.xaml.cs │ ├── SubredditWidget.xaml │ ├── SubredditWidget.xaml.cs │ ├── ValidationFormWidget.xaml │ └── ValidationFormWidget.xaml.cs ├── MvvmSampleXF.sln ├── MvvmSampleXF ├── MvvmSampleXF.Android │ ├── Assets │ │ ├── AboutAssets.txt │ │ ├── FontAwesomeBrands.otf │ │ ├── FontAwesomeRegular.otf │ │ └── FontAwesomeSolid.otf │ ├── MainActivity.cs │ ├── MvvmSampleXF.Android.csproj │ ├── Properties │ │ ├── AndroidManifest.xml │ │ └── AssemblyInfo.cs │ ├── Resources │ │ ├── AboutResources.txt │ │ ├── Resource.designer.cs │ │ ├── drawable-hdpi │ │ │ └── logo.png │ │ ├── drawable-mdpi │ │ │ └── logo.png │ │ ├── drawable-xhdpi │ │ │ └── logo.png │ │ ├── drawable-xxhdpi │ │ │ └── logo.png │ │ ├── drawable-xxxhdpi │ │ │ └── logo.png │ │ ├── drawable │ │ │ ├── headerBg.jpg │ │ │ └── splash_screen.xml │ │ ├── layout │ │ │ ├── Tabbar.xml │ │ │ └── Toolbar.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── icon.xml │ │ │ └── icon_round.xml │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ └── SplashActivity.cs ├── MvvmSampleXF.iOS │ ├── AppDelegate.cs │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon1024.png │ │ │ ├── Icon120.png │ │ │ ├── Icon152.png │ │ │ ├── Icon167.png │ │ │ ├── Icon180.png │ │ │ ├── Icon20.png │ │ │ ├── Icon29.png │ │ │ ├── Icon40.png │ │ │ ├── Icon58.png │ │ │ ├── Icon60.png │ │ │ ├── Icon76.png │ │ │ ├── Icon80.png │ │ │ └── Icon87.png │ │ ├── SplashScreen.imageset │ │ │ ├── Contents.json │ │ │ └── StoreLogo..png │ │ └── headerBg.imageset │ │ │ ├── Contents.json │ │ │ └── headerBg.jpg │ ├── Entitlements.plist │ ├── Info.plist │ ├── Main.cs │ ├── MvvmSampleXF.iOS.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Resources │ │ ├── Default-568h@2x.png │ │ ├── Default-Portrait.png │ │ ├── Default-Portrait@2x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── FontAwesomeBrands.otf │ │ ├── FontAwesomeRegular.otf │ │ ├── FontAwesomeSolid.otf │ │ └── LaunchScreen.storyboard └── MvvmSampleXF │ ├── App.xaml │ ├── App.xaml.cs │ ├── AppShell.xaml │ ├── AppShell.xaml.cs │ ├── AssemblyInfo.cs │ ├── Controls │ ├── FlyoutHeader.xaml │ ├── FlyoutHeader.xaml.cs │ ├── InteractiveSample.xaml │ └── InteractiveSample.xaml.cs │ ├── Converters │ ├── IsSelfPostToWidthRequestConverter.cs │ └── TaskResultConverter.cs │ ├── MvvmSampleXF.csproj │ ├── Services │ ├── FileService.cs │ └── SettingsService.cs │ └── Views │ ├── AsyncRelayCommandPage.xaml │ ├── AsyncRelayCommandPage.xaml.cs │ ├── BuildingTheUIPage.xaml │ ├── BuildingTheUIPage.xaml.cs │ ├── IntroductionPage.xaml │ ├── IntroductionPage.xaml.cs │ ├── IoCPage.xaml │ ├── IoCPage.xaml.cs │ ├── MessengerPage.xaml │ ├── MessengerPage.xaml.cs │ ├── MessengerRequestPage.xaml │ ├── MessengerRequestPage.xaml.cs │ ├── MessengerSendPage.xaml │ ├── MessengerSendPage.xaml.cs │ ├── ObservableObjectPage.xaml │ ├── ObservableObjectPage.xaml.cs │ ├── PuttingThingsTogetherPage.xaml │ ├── PuttingThingsTogetherPage.xaml.cs │ ├── RedditBrowserPage.xaml │ ├── RedditBrowserPage.xaml.cs │ ├── RedditServicePage.xaml │ ├── RedditServicePage.xaml.cs │ ├── RelayCommandPage.xaml │ ├── RelayCommandPage.xaml.cs │ ├── SettingUpTheViewModelsPage.xaml │ ├── SettingUpTheViewModelsPage.xaml.cs │ ├── SettingsServicePage.xaml │ ├── SettingsServicePage.xaml.cs │ └── Widgets │ ├── PostWidget.xaml │ ├── PostWidget.xaml.cs │ ├── SubredditWidget.xaml │ └── SubredditWidget.xaml.cs └── NuGet.config /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Refactor to file-scoped namespaces 2 | 4c8a30e4d6588d0921dca49e8ab3fb1c01e35c08 3 | 4 | # Fix incorrect line terminators 5 | 382a58f8883388e36fdbc0154c415141317080d9 -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "CommunityToolkit"] 2 | path = msdocs-communitytoolkit 3 | url = https://github.com/MicrosoftDocs/CommunityToolkit 4 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | # Windows Community Toolkit 2 | 3 | Copyright (c) .NET Foundation and Contributors 4 | 5 | All rights reserved. 6 | 7 | # MIT License (MIT) 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 14 | -------------------------------------------------------------------------------- /samples/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | net9.0 4 | latest 5 | enable 6 | preview 7 | 8 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Helpers/MarkdownHelper.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text.RegularExpressions; 8 | 9 | namespace MvvmSample.Core.Helpers; 10 | 11 | /// 12 | /// A simple class to help with basic operations on markdown documents. 13 | /// 14 | public static class MarkdownHelper 15 | { 16 | /// 17 | /// Gets all the paragraphs in a given markdown document. 18 | /// 19 | /// The input markdown document. 20 | /// The raw paragraphs from . 21 | public static IReadOnlyDictionary GetParagraphs(string text) 22 | { 23 | return 24 | Regex.Matches(text, @"(?<=\W)#+ ([^\n]+).+?(?=\W#|$)", RegexOptions.Singleline) 25 | .OfType() 26 | .ToDictionary( 27 | m => Regex.Replace(m.Groups[1].Value.Trim().Replace("<", "<"), @"\[([^]]+)\]\([^)]+\)", m => m.Groups[1].Value), 28 | m => m.Groups[0].Value.Trim().Replace("<", "<").Replace("[!WARNING]", "**WARNING:**").Replace("[!NOTE]", "**NOTE:**")); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/MvvmSample.Core.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.0 5 | 4e66f7b4-01a8-4f00-8733-4ae6a08c741f 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Properties/System.Runtime.CompilerServices/IsExternalInit.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace System.Runtime.CompilerServices 7 | { 8 | /// 9 | /// Reserved to be used by the compiler for tracking metadata. 10 | /// This class should not be used by developers in source code. 11 | /// 12 | [EditorBrowsable(EditorBrowsableState.Never)] 13 | internal static class IsExternalInit 14 | { 15 | } 16 | } -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Services/IContactsService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Threading.Tasks; 6 | using MvvmSample.Core.Models; 7 | using Refit; 8 | 9 | namespace MvvmSample.Core.Services; 10 | 11 | /// 12 | /// An interface for a simple contacts service. 13 | /// 14 | public interface IContactsService 15 | { 16 | /// 17 | /// Get a list of contacts. 18 | /// 19 | /// The number of contacts to retrieve. 20 | [Get("/api/?dataType=json&inc=name,email,picture")] 21 | Task GetContactsAsync([AliasAs("results")] int count); 22 | } 23 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Services/IDialogService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Threading.Tasks; 6 | 7 | namespace MvvmSample.Core.Services; 8 | 9 | /// 10 | /// The default for a service that shows dialogs 11 | /// 12 | public interface IDialogService 13 | { 14 | /// 15 | /// Shows a message dialog with a title and custom content. 16 | /// 17 | /// The title of the message dialog. 18 | /// The content of the message dialog. 19 | Task ShowMessageDialogAsync(string title, string message); 20 | } 21 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Services/IFileService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.IO; 6 | using System.Threading.Tasks; 7 | 8 | namespace MvvmSample.Core.Services; 9 | 10 | /// 11 | /// The default for a service that handles files. 12 | /// 13 | public interface IFilesService 14 | { 15 | /// 16 | /// Gets the path of the installation directory. 17 | /// 18 | string InstallationPath { get; } 19 | 20 | /// 21 | /// Gets a readonly for a file at a specified path. 22 | /// 23 | /// The path of the file to retrieve. 24 | /// The for the specified file. 25 | Task OpenForReadAsync(string path); 26 | } 27 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Services/IRedditService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Threading.Tasks; 6 | using MvvmSample.Core.Models; 7 | using Refit; 8 | 9 | namespace MvvmSample.Core.Services; 10 | 11 | /// 12 | /// An interface for a simple Reddit service. 13 | /// 14 | public interface IRedditService 15 | { 16 | /// 17 | /// Get a list of posts from a given subreddit 18 | /// 19 | /// The subreddit name. 20 | [Get("/r/{subreddit}/.json")] 21 | Task GetSubredditPostsAsync(string subreddit); 22 | } 23 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/Services/ISettingsService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | 7 | namespace MvvmSample.Core.Services; 8 | 9 | /// 10 | /// The default for the settings manager used in the app. 11 | /// 12 | public interface ISettingsService 13 | { 14 | /// 15 | /// Assigns a value to a settings key. 16 | /// 17 | /// The type of the object bound to the key. 18 | /// The key to check. 19 | /// The value to assign to the setting key. 20 | void SetValue(string key, T? value); 21 | 22 | /// 23 | /// Reads a value from the current instance and returns its casting in the right type. 24 | /// 25 | /// The type of the object to retrieve. 26 | /// The key associated to the requested object. 27 | T? GetValue(string key); 28 | } 29 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/AsyncRelayCommandPageViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Threading.Tasks; 6 | using CommunityToolkit.Mvvm.Input; 7 | using MvvmSample.Core.Services; 8 | 9 | namespace MvvmSample.Core.ViewModels; 10 | 11 | public class AsyncRelayCommandPageViewModel : SamplePageViewModel 12 | { 13 | public AsyncRelayCommandPageViewModel(IFilesService filesService) 14 | : base(filesService) 15 | { 16 | DownloadTextCommand = new AsyncRelayCommand(DownloadTextAsync); 17 | } 18 | 19 | public IAsyncRelayCommand DownloadTextCommand { get; } 20 | 21 | private async Task DownloadTextAsync() 22 | { 23 | await Task.Delay(3000); // Simulate a web request 24 | 25 | return "Hello world!"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/CollectionsPageViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using MvvmSample.Core.Services; 6 | 7 | namespace MvvmSample.Core.ViewModels; 8 | 9 | public partial class CollectionsPageViewModel : SamplePageViewModel 10 | { 11 | public CollectionsPageViewModel(IFilesService filesService) 12 | : base(filesService) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/IocPageViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using MvvmSample.Core.Services; 6 | 7 | namespace MvvmSample.Core.ViewModels; 8 | 9 | public class IocPageViewModel : SamplePageViewModel 10 | { 11 | public IocPageViewModel(IFilesService filesService) 12 | : base(filesService) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/ObservableValidatorPageViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using MvvmSample.Core.Services; 6 | 7 | namespace MvvmSample.Core.ViewModels; 8 | 9 | public partial class ObservableValidatorPageViewModel : SamplePageViewModel 10 | { 11 | public ObservableValidatorPageViewModel(IFilesService filesService) 12 | : base(filesService) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/RelayCommandPageViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System.Windows.Input; 6 | using CommunityToolkit.Mvvm.Input; 7 | using MvvmSample.Core.Services; 8 | 9 | namespace MvvmSample.Core.ViewModels; 10 | 11 | public class RelayCommandPageViewModel : SamplePageViewModel 12 | { 13 | public RelayCommandPageViewModel(IFilesService filesService) 14 | : base(filesService) 15 | { 16 | IncrementCounterCommand = new RelayCommand(IncrementCounter); 17 | } 18 | 19 | /// 20 | /// Gets the responsible for incrementing . 21 | /// 22 | public ICommand IncrementCounterCommand { get; } 23 | 24 | private int counter; 25 | 26 | /// 27 | /// Gets the current value of the counter. 28 | /// 29 | public int Counter 30 | { 31 | get => counter; 32 | private set => SetProperty(ref counter, value); 33 | } 34 | 35 | /// 36 | /// Increments . 37 | /// 38 | private void IncrementCounter() => Counter++; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /samples/MvvmSample.Core/ViewModels/Widgets/PostWidgetViewModel.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.ComponentModel; 6 | using CommunityToolkit.Mvvm.Messaging; 7 | using CommunityToolkit.Mvvm.Messaging.Messages; 8 | using MvvmSample.Core.Models; 9 | 10 | namespace MvvmSample.Core.ViewModels.Widgets; 11 | 12 | /// 13 | /// A viewmodel for a post widget. 14 | /// 15 | public sealed class PostWidgetViewModel : ObservableRecipient, IRecipient> 16 | { 17 | private Post? post; 18 | 19 | /// 20 | /// Gets the currently selected post, if any. 21 | /// 22 | public Post? Post 23 | { 24 | get => post; 25 | private set => SetProperty(ref post, value); 26 | } 27 | 28 | /// 29 | public void Receive(PropertyChangedMessage message) 30 | { 31 | if (message.Sender.GetType() == typeof(SubredditWidgetViewModel) && 32 | message.PropertyName == nameof(SubredditWidgetViewModel.SelectedPost)) 33 | { 34 | Post = message.NewValue; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/App.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI; 2 | 3 | public partial class App : Application 4 | { 5 | readonly AppShell _appShell; 6 | 7 | public App(AppShell appShell) 8 | { 9 | InitializeComponent(); 10 | 11 | _appShell = appShell; 12 | } 13 | 14 | protected override Window CreateWindow(IActivationState? activationState) => new(_appShell); 15 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/AppShell.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI; 2 | 3 | [XamlCompilation(XamlCompilationOptions.Compile)] 4 | public partial class AppShell : Shell 5 | { 6 | public AppShell() 7 | { 8 | InitializeComponent(); 9 | } 10 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Controls/FlyoutHeader.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Controls/FlyoutHeader.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI.Controls; 2 | 3 | [XamlCompilation(XamlCompilationOptions.Compile)] 4 | public partial class FlyoutHeader : ContentView 5 | { 6 | public FlyoutHeader() 7 | { 8 | InitializeComponent(); 9 | } 10 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Controls/InteractiveSample.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Controls/InteractiveSample.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI.Controls; 2 | 3 | [XamlCompilation(XamlCompilationOptions.Compile)] 4 | public partial class InteractiveSample : ContentView 5 | { 6 | public static readonly BindableProperty CSharpCodeProperty = BindableProperty.Create(nameof(CSharpCode), typeof(string), typeof(InteractiveSample), string.Empty); 7 | public static readonly BindableProperty XamlCodeProperty = BindableProperty.Create(nameof(XamlCode), typeof(string), typeof(InteractiveSample), string.Empty); 8 | 9 | public InteractiveSample() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | public string CSharpCode 15 | { 16 | get => (string)GetValue(CSharpCodeProperty); 17 | set => SetValue(CSharpCodeProperty, value); 18 | } 19 | 20 | public string XamlCode 21 | { 22 | get => (string)GetValue(XamlCodeProperty); 23 | set => SetValue(XamlCodeProperty, value); 24 | } 25 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Converters/IsSelfPostToWidthRequestConverter.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | using CommunityToolkit.Maui.Converters; 3 | 4 | namespace MvvmSampleMAUI.Converters; 5 | 6 | [AcceptEmptyServiceProvider] 7 | public class IsSelfPostToWidthRequestConverter : BaseConverterOneWay 8 | { 9 | public double WidthRequest { get; set; } = 0; 10 | 11 | public override double DefaultConvertReturnValue 12 | { 13 | get => WidthRequest; 14 | set => WidthRequest = value; 15 | } 16 | 17 | public override double ConvertFrom(string value, CultureInfo? culture) => 18 | value.Equals("self", StringComparison.OrdinalIgnoreCase) ? 0 : WidthRequest; 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Converters/TaskResultConverter.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | using CommunityToolkit.Maui.Converters; 3 | 4 | namespace MvvmSampleMAUI.Converters; 5 | 6 | [AcceptEmptyServiceProvider] 7 | public class TaskResultConverter : BaseConverterOneWay, string?> 8 | { 9 | public override string? DefaultConvertReturnValue { get; set; } = null; 10 | 11 | public override string? ConvertFrom(Task value, CultureInfo? culture) => 12 | value.Status == TaskStatus.RanToCompletion ? value.Result : null; 13 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Android/MainActivity.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Content.PM; 3 | using Android.OS; 4 | 5 | namespace MvvmSampleMAUI; 6 | 7 | [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] 8 | public class MainActivity : MauiAppCompatActivity 9 | { 10 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Android/MainApplication.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Runtime; 3 | 4 | namespace MvvmSampleMAUI; 5 | 6 | [Application] 7 | public class MainApplication : MauiApplication 8 | { 9 | public MainApplication(IntPtr handle, JniHandleOwnership ownership) 10 | : base(handle, ownership) 11 | { 12 | } 13 | 14 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 15 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #512BD4 4 | #2B0B98 5 | #2B0B98 6 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/MacCatalyst/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace MvvmSampleMAUI; 4 | 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/MacCatalyst/Entitlements.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | com.apple.security.app-sandbox 8 | 9 | 10 | com.apple.security.network.client 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/MacCatalyst/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace MvvmSampleMAUI; 5 | 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Tizen/Main.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.Maui; 3 | using Microsoft.Maui.Hosting; 4 | 5 | namespace MvvmSampleMAUI; 6 | 7 | class Program : MauiApplication 8 | { 9 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 10 | 11 | static void Main(string[] args) 12 | { 13 | var app = new Program(); 14 | app.Run(args); 15 | } 16 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Tizen/tizen-manifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | maui-appicon-placeholder 7 | 8 | 9 | 10 | 11 | http://tizen.org/privilege/internet 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Windows/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Windows/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.UI.Xaml; 2 | 3 | // To learn more about WinUI, the WinUI project structure, 4 | // and more about our project templates, see: http://aka.ms/winui-project-info. 5 | 6 | namespace MvvmSampleMAUI.WinUI; 7 | 8 | /// 9 | /// Provides application-specific behavior to supplement the default Application class. 10 | /// 11 | public partial class App : MauiWinUIApplication 12 | { 13 | /// 14 | /// Initializes the singleton application object. This is the first line of authored code 15 | /// executed, and as such is the logical equivalent of main() or WinMain(). 16 | /// 17 | public App() 18 | { 19 | this.InitializeComponent(); 20 | } 21 | 22 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 23 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/Windows/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | true/PM 12 | PerMonitorV2, PerMonitor 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using Foundation; 2 | 3 | namespace MvvmSampleMAUI; 4 | 5 | [Register("AppDelegate")] 6 | public class AppDelegate : MauiUIApplicationDelegate 7 | { 8 | protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); 9 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LSRequiresIPhoneOS 6 | 7 | UIDeviceFamily 8 | 9 | 1 10 | 2 11 | 12 | UIRequiredDeviceCapabilities 13 | 14 | arm64 15 | 16 | UISupportedInterfaceOrientations 17 | 18 | UIInterfaceOrientationPortrait 19 | UIInterfaceOrientationLandscapeLeft 20 | UIInterfaceOrientationLandscapeRight 21 | 22 | UISupportedInterfaceOrientations~ipad 23 | 24 | UIInterfaceOrientationPortrait 25 | UIInterfaceOrientationPortraitUpsideDown 26 | UIInterfaceOrientationLandscapeLeft 27 | UIInterfaceOrientationLandscapeRight 28 | 29 | XSAppIconAssets 30 | Assets.xcassets/appicon.appiconset 31 | 32 | 33 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Platforms/iOS/Program.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | using UIKit; 3 | 4 | namespace MvvmSampleMAUI; 5 | 6 | public class Program 7 | { 8 | // This is the main entry point of the application. 9 | static void Main(string[] args) 10 | { 11 | // if you want to use a different Application Delegate class from "AppDelegate" 12 | // you can specify it here. 13 | UIApplication.Main(args, null, typeof(AppDelegate)); 14 | } 15 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Windows Machine": { 4 | "commandName": "MsixPackage", 5 | "nativeDebugging": false 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/AppIcon/appicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/AppResources.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI; 2 | 3 | static class AppResources 4 | { 5 | public static T GetResource(string resourceName, T? defaultValue = default) 6 | { 7 | if (Application.Current is null) 8 | { 9 | return defaultValue ?? throw new InvalidOperationException("Application cannot be null"); 10 | } 11 | 12 | if (Application.Current.Resources.TryGetValue(resourceName, out var resource)) 13 | { 14 | return (T)resource; 15 | } 16 | 17 | foreach (var resourceDictionary in Application.Current.Resources.MergedDictionaries) 18 | { 19 | if (resourceDictionary.TryGetValue(resourceName, out var resourceValue)) 20 | { 21 | return (T)resourceValue; 22 | } 23 | } 24 | 25 | throw new KeyNotFoundException($"Resource {resourceName} not found"); 26 | } 27 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeBrands.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeBrands.otf -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeRegular.otf -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeSolid.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Fonts/FontAwesomeSolid.otf -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Images/dotnet_bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleMAUI/Resources/Images/dotnet_bot.png -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Resources/Raw/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories). Deployment of the asset to your application 3 | is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. 4 | 5 | 6 | 7 | These files will be deployed with your package and will be accessible using Essentials: 8 | 9 | async Task LoadMauiAsset() 10 | { 11 | using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); 12 | using var reader = new StreamReader(stream); 13 | 14 | var contents = reader.ReadToEnd(); 15 | } 16 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Services/FileService.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using MvvmSample.Core.Services; 3 | 4 | namespace MvvmSampleMAUI.Services; 5 | 6 | public sealed class FileService : IFilesService 7 | { 8 | public string InstallationPath { get; } = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 9 | 10 | public Task OpenForReadAsync(string path) 11 | { 12 | if (GetType() is not Type type) 13 | { 14 | throw new InvalidOperationException("Could not retrieve type"); 15 | } 16 | 17 | return GetEmbeddedFileStreamAsync(type, path); 18 | } 19 | 20 | 21 | static async Task GetEmbeddedFileStreamAsync(Type assemblyType, string fileName) 22 | { 23 | var manifestName = assemblyType.GetTypeInfo().Assembly 24 | .GetManifestResourceNames() 25 | .FirstOrDefault(n => n.EndsWith(fileName.Replace(" ", "_").Replace("\\", ".").Replace("/", "."), StringComparison.OrdinalIgnoreCase)) 26 | ?? throw new InvalidOperationException($"Failed to find resource [{fileName}]"); 27 | 28 | return await Task.FromResult(assemblyType.GetTypeInfo().Assembly.GetManifestResourceStream(manifestName) ?? Stream.Null) 29 | .ConfigureAwait(ConfigureAwaitOptions.ForceYielding | ConfigureAwaitOptions.None); 30 | } 31 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Services/SettingsService.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.Services; 2 | 3 | namespace MvvmSampleMAUI.Services; 4 | 5 | public sealed class SettingsService(IPreferences preferences) : ISettingsService 6 | { 7 | readonly IPreferences _preferences = preferences; 8 | 9 | public T? GetValue(string key) => _preferences.Get(key, default); 10 | 11 | public void SetValue(string key, T? value) => _preferences.Set(key, value); 12 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/AsyncRelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | namespace MvvmSampleMAUI.Views; 5 | 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class AsyncRelayCommandPage : BaseContentPage 8 | { 9 | public AsyncRelayCommandPage(AsyncRelayCommandPageViewModel viewModel) : base(viewModel) 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | protected override void OnAppearing() 15 | { 16 | base.OnAppearing(); 17 | 18 | BindingContext.LoadDocsCommand.Execute("AsyncRelayCommand"); 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/BaseContentPage.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | namespace MvvmSampleMAUI.Views; 3 | 4 | public abstract class BaseContentPage : ContentPage where TViewModel : ObservableObject 5 | { 6 | protected BaseContentPage(TViewModel viewModel) 7 | { 8 | base.BindingContext = viewModel; 9 | } 10 | 11 | protected new TViewModel BindingContext => (TViewModel)base.BindingContext; 12 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/BuildingTheUIPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/BuildingTheUIPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class BuildingTheUIPage : BaseContentPage 7 | { 8 | public BuildingTheUIPage(SamplePageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("PuttingThingsTogether"); 18 | } 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/IntroductionPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/IntroductionPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | namespace MvvmSampleMAUI.Views; 5 | 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class IntroductionPage : BaseContentPage 8 | { 9 | public IntroductionPage(ObservableObjectPageViewModel viewModel) : base(viewModel) 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | protected override void OnAppearing() 15 | { 16 | base.OnAppearing(); 17 | 18 | BindingContext.LoadDocsCommand.Execute("Introduction"); 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/IoCPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/IoCPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | namespace MvvmSampleMAUI.Views; 5 | 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class IoCPage : BaseContentPage 8 | { 9 | public IoCPage(IocPageViewModel viewModel) : base(viewModel) 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | public IocPageViewModel ViewModel => (IocPageViewModel)BindingContext; 15 | 16 | protected override void OnAppearing() 17 | { 18 | base.OnAppearing(); 19 | 20 | ViewModel.LoadDocsCommand.Execute("IoC"); 21 | } 22 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/MessengerPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/MessengerPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | namespace MvvmSampleMAUI.Views; 5 | 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class MessengerPage : BaseContentPage 8 | { 9 | public MessengerPage(MessengerPageViewModel viewModel) : base(viewModel) 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | protected override void OnAppearing() 15 | { 16 | base.OnAppearing(); 17 | 18 | BindingContext.LoadDocsCommand.Execute("Messenger"); 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/MessengerRequestPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class MessengerRequestPage : BaseContentPage 7 | { 8 | public MessengerRequestPage(MessengerPageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("Messenger"); 18 | BindingContext.SenderViewModel.IsActive = true; 19 | BindingContext.ReceiverViewModel.IsActive = true; 20 | } 21 | 22 | protected override void OnDisappearing() 23 | { 24 | base.OnDisappearing(); 25 | 26 | BindingContext.SenderViewModel.IsActive = false; 27 | BindingContext.ReceiverViewModel.IsActive = false; 28 | } 29 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/MessengerSendPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class MessengerSendPage : BaseContentPage 7 | { 8 | public MessengerSendPage(MessengerPageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("Messenger"); 18 | BindingContext.SenderViewModel.IsActive = true; 19 | BindingContext.ReceiverViewModel.IsActive = true; 20 | } 21 | 22 | protected override void OnDisappearing() 23 | { 24 | base.OnDisappearing(); 25 | 26 | BindingContext.SenderViewModel.IsActive = false; 27 | BindingContext.ReceiverViewModel.IsActive = false; 28 | } 29 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/ObservableObjectPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class ObservableObjectPage : BaseContentPage 7 | { 8 | public ObservableObjectPage(ObservableObjectPageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("ObservableObject"); 18 | } 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/PuttingThingsTogetherPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/PuttingThingsTogetherPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | namespace MvvmSampleMAUI.Views; 5 | 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class PuttingThingsTogetherPage : BaseContentPage 8 | { 9 | public PuttingThingsTogetherPage(SamplePageViewModel viewModel) : base(viewModel) 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | protected override void OnAppearing() 15 | { 16 | base.OnAppearing(); 17 | 18 | BindingContext.LoadDocsCommand.Execute("PuttingThingsTogether"); 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/RedditBrowserPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MvvmSampleMAUI.Views; 2 | 3 | [XamlCompilation(XamlCompilationOptions.Compile)] 4 | public partial class RedditBrowserPage : ContentPage 5 | { 6 | public RedditBrowserPage() 7 | { 8 | InitializeComponent(); 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/RedditServicePage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/RedditServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class RedditServicePage : BaseContentPage 7 | { 8 | public RedditServicePage(SamplePageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | BindingContext.LoadDocsCommand.Execute("PuttingThingsTogether"); 17 | } 18 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/RelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class RelayCommandPage : BaseContentPage 7 | { 8 | public RelayCommandPage(RelayCommandPageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("RelayCommand"); 18 | } 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/SettingUpTheViewModelsPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/SettingUpTheViewModelsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class SettingUpTheViewModelsPage : BaseContentPage 7 | { 8 | public SettingUpTheViewModelsPage(SamplePageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("PuttingThingsTogether"); 18 | } 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/SettingsServicePage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 12 | 13 | 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/SettingsServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | namespace MvvmSampleMAUI.Views; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class SettingsServicePage : BaseContentPage 7 | { 8 | public SettingsServicePage(SamplePageViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | protected override void OnAppearing() 14 | { 15 | base.OnAppearing(); 16 | 17 | BindingContext.LoadDocsCommand.Execute("PuttingThingsTogether"); 18 | } 19 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/Widgets/BaseContentView.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | namespace MvvmSampleMAUI.Views.Widgets; 3 | 4 | public abstract class BaseContentView : ContentView where TViewModel : ObservableObject 5 | { 6 | protected BaseContentView(TViewModel viewModel) 7 | { 8 | base.BindingContext = viewModel; 9 | } 10 | 11 | protected new TViewModel BindingContext => (TViewModel)base.BindingContext; 12 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/Widgets/PostWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels.Widgets; 2 | 3 | namespace MvvmSampleMAUI.Views.Widgets; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class PostWidget : BaseContentView 7 | { 8 | public PostWidget(PostWidgetViewModel viewModel) : base(viewModel) 9 | { 10 | InitializeComponent(); 11 | 12 | Loaded += HandleLoaded; 13 | Unloaded += HandleUnloaded; 14 | } 15 | 16 | void HandleLoaded(object? sender, EventArgs e) 17 | { 18 | BindingContext.IsActive = true; 19 | } 20 | 21 | void HandleUnloaded(object? sender, EventArgs e) 22 | { 23 | BindingContext.IsActive = false; 24 | } 25 | } -------------------------------------------------------------------------------- /samples/MvvmSampleMAUI/Views/Widgets/SubredditWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels.Widgets; 2 | 3 | namespace MvvmSampleMAUI.Views.Widgets; 4 | 5 | [XamlCompilation(XamlCompilationOptions.Compile)] 6 | public partial class SubredditWidget : BaseContentView 7 | { 8 | readonly WeakEventManager postSelectedEventManager = new(); 9 | 10 | public SubredditWidget(SubredditWidgetViewModel viewModel) : base(viewModel) 11 | { 12 | InitializeComponent(); 13 | 14 | Loaded += HandleLoaded; 15 | } 16 | 17 | public event EventHandler PostSelected 18 | { 19 | add => postSelectedEventManager.AddEventHandler(value); 20 | remove => postSelectedEventManager.RemoveEventHandler(value); 21 | } 22 | 23 | void CollectionView_SelectionChanged(object? sender, SelectionChangedEventArgs e) 24 | { 25 | ArgumentNullException.ThrowIfNull(sender); 26 | 27 | var collectionView = (CollectionView)sender; 28 | 29 | OnPostSelected(); 30 | 31 | collectionView.SelectedItem = null; 32 | } 33 | 34 | void HandleLoaded(object? sender, EventArgs e) 35 | { 36 | BindingContext.LoadPostsCommand.Execute(null); 37 | } 38 | 39 | void OnPostSelected() => postSelectedEventManager.HandleEvent(this, EventArgs.Empty, nameof(PostSelected)); 40 | } -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/App.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 12,20,20,20 18 | 19 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppIcon.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-16_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-20_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-256_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-30_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-32_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-36_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-40_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-48_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-56_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-60_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-64_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-72_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-80_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96_altform-lightunplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96_altform-lightunplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/AppList.targetsize-96_altform-unplated.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/LargeTile.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/MedTile.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SmallTile.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100_altform-colorful_theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100_altform-colorful_theme-dark.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125_altform-colorful_theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125_altform-colorful_theme-dark.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150_altform-colorful_theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150_altform-colorful_theme-dark.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200_altform-colorful_theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200_altform-colorful_theme-dark.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400_altform-colorful_theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400_altform-colorful_theme-dark.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/SplashScreen.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-300.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreDisplay-71.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/StoreLogo.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-100.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-100_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-100_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-125.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-125_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-125_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-150.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-150_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-150_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-200.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-200_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-200_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-400.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-400_altform-colorful_theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/Icon/WideTile.scale-400_altform-colorful_theme-light.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Assets/StoreLogo.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleUwp/Assets/StoreLogo.backup.png -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Converters/TaskResultConverter.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | using System.Threading.Tasks; 7 | using Windows.UI.Xaml.Data; 8 | 9 | #nullable enable 10 | 11 | namespace Microsoft.Toolkit.Uwp.UI.Converters; 12 | 13 | /// 14 | /// Custom version of the converter from the Toolkit, with a bug fix. 15 | /// This should be moved over to the Toolkit in the next release. 16 | /// 17 | public sealed class TaskResultConverter2 : IValueConverter 18 | { 19 | /// 20 | public object? Convert(object? value, Type? targetType, object? parameter, string? language) 21 | { 22 | if (value is Task task) 23 | { 24 | return task.GetResultOrDefault(); 25 | } 26 | 27 | return null; 28 | } 29 | 30 | /// 31 | public object ConvertBack(object? value, Type? targetType, object? parameter, string? language) 32 | { 33 | throw new NotImplementedException(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Helpers/TitleBarHelper.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Windows.ApplicationModel.Core; 6 | using Windows.UI; 7 | using Windows.UI.ViewManagement; 8 | 9 | namespace MvvmSampleUwp.Helpers; 10 | 11 | /// 12 | /// A with helper methods to manage the title bar. 13 | /// 14 | public static class TitleBarHelper 15 | { 16 | /// 17 | /// Styles the title bar buttons according to the theme in use. 18 | /// 19 | public static void StyleTitleBar() 20 | { 21 | ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar; 22 | 23 | // Transparent colors 24 | titleBar.ForegroundColor = Colors.Transparent; 25 | titleBar.BackgroundColor = Colors.Transparent; 26 | titleBar.ButtonBackgroundColor = Colors.Transparent; 27 | titleBar.InactiveBackgroundColor = Colors.Transparent; 28 | titleBar.ButtonInactiveBackgroundColor = Colors.Transparent; 29 | } 30 | 31 | /// 32 | /// Sets up the app UI to be expanded into the title bar. 33 | /// 34 | public static void ExpandViewIntoTitleBar() 35 | { 36 | CoreApplicationViewTitleBar coreTitleBar = CoreApplication.GetCurrentView().TitleBar; 37 | coreTitleBar.ExtendViewIntoTitleBar = true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MvvmSampleUwp")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MvvmSampleUwp")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Version information for an assembly consists of the following four values: 18 | // 19 | // Major Version 20 | // Minor Version 21 | // Build Number 22 | // Revision 23 | // 24 | // You can specify all the values or you can default the Build and Revision Numbers 25 | // by using the '*' as shown below: 26 | // [assembly: AssemblyVersion("1.0.*")] 27 | [assembly: AssemblyVersion("1.0.0.0")] 28 | [assembly: AssemblyFileVersion("1.0.0.0")] 29 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Services/DialogService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using System; 6 | using System.Threading.Tasks; 7 | using MvvmSample.Core.Services; 8 | using Windows.UI.Xaml.Controls; 9 | 10 | #nullable enable 11 | 12 | namespace MvvmSampleUwp.Services; 13 | 14 | /// 15 | /// A that implements the using UWP APIs. 16 | /// 17 | public sealed class DialogService : IDialogService 18 | { 19 | /// 20 | public Task ShowMessageDialogAsync(string title, string message) 21 | { 22 | ContentDialog dialog = new(); 23 | dialog.Title = title; 24 | dialog.CloseButtonText = "Close"; 25 | dialog.DefaultButton = ContentDialogButton.Close; 26 | dialog.Content = message; 27 | 28 | return dialog.ShowAsync().AsTask(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Services/FileService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using MvvmSample.Core.Services; 6 | using System; 7 | using System.IO; 8 | using System.Threading.Tasks; 9 | using Windows.ApplicationModel; 10 | using Windows.Storage; 11 | 12 | #nullable enable 13 | 14 | namespace MvvmSampleUwp.Services; 15 | 16 | /// 17 | /// A that implements the using UWP APIs. 18 | /// 19 | public sealed class FilesService : IFilesService 20 | { 21 | /// 22 | public string InstallationPath => Package.Current.InstalledLocation.Path; 23 | 24 | /// 25 | public async Task OpenForReadAsync(string path) 26 | { 27 | StorageFile file = await StorageFile.GetFileFromPathAsync(Path.Combine(InstallationPath, path)); 28 | 29 | return await file.OpenStreamForReadAsync(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Services/SettingsService.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using MvvmSample.Core.Services; 6 | using Windows.Foundation.Collections; 7 | using Windows.Storage; 8 | 9 | #nullable enable 10 | 11 | namespace MvvmSampleUwp.Services; 12 | 13 | /// 14 | /// A simple that handles the local app settings. 15 | /// 16 | public sealed class SettingsService : ISettingsService 17 | { 18 | /// 19 | /// The with the settings targeted by the current instance. 20 | /// 21 | private readonly IPropertySet SettingsStorage = ApplicationData.Current.LocalSettings.Values; 22 | 23 | /// 24 | public void SetValue(string key, T? value) 25 | { 26 | if (!SettingsStorage.ContainsKey(key)) SettingsStorage.Add(key, value); 27 | else SettingsStorage[key] = value; 28 | } 29 | 30 | /// 31 | public T? GetValue(string key) 32 | { 33 | if (SettingsStorage.TryGetValue(key, out object? value)) 34 | { 35 | return (T)value!; 36 | } 37 | 38 | return default; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/AsyncRelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class AsyncRelayCommandPage : Page 15 | { 16 | public AsyncRelayCommandPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public AsyncRelayCommandPageViewModel ViewModel => (AsyncRelayCommandPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/BuildingTheUIPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class BuildingTheUIPage : Page 15 | { 16 | public BuildingTheUIPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/CollectionsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class CollectionsPage : Page 15 | { 16 | public CollectionsPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public CollectionsPageViewModel ViewModel => (CollectionsPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/INotifyPropertyChangedAttributePage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/INotifyPropertyChangedAttributePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class INotifyPropertyChangedAttributePage : Page 15 | { 16 | public INotifyPropertyChangedAttributePage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/IntroductionPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/IntroductionPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class IntroductionPage : Page 15 | { 16 | public IntroductionPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public ObservableObjectPageViewModel ViewModel => (ObservableObjectPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/IocPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/IocPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class IocPage : Page 15 | { 16 | public IocPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public IocPageViewModel ViewModel => (IocPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/MessengerPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/MessengerPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class MessengerPage : Page 15 | { 16 | public MessengerPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/MessengerRequestPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | using Windows.UI.Xaml.Navigation; 9 | 10 | namespace MvvmSampleUwp.Views; 11 | 12 | /// 13 | /// An empty page that can be used on its own or navigated to within a Frame. 14 | /// 15 | public sealed partial class MessengerRequestPage : Page 16 | { 17 | public MessengerRequestPage() 18 | { 19 | this.InitializeComponent(); 20 | 21 | DataContext = Ioc.Default.GetRequiredService(); 22 | } 23 | 24 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)DataContext; 25 | 26 | /// 27 | protected override void OnNavigatedTo(NavigationEventArgs e) 28 | { 29 | ViewModel.SenderViewModel.IsActive = true; 30 | ViewModel.ReceiverViewModel.IsActive = true; 31 | } 32 | 33 | /// 34 | protected override void OnNavigatedFrom(NavigationEventArgs e) 35 | { 36 | ViewModel.SenderViewModel.IsActive = false; 37 | ViewModel.ReceiverViewModel.IsActive = false; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/MessengerSendPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | using Windows.UI.Xaml.Navigation; 9 | 10 | namespace MvvmSampleUwp.Views; 11 | 12 | /// 13 | /// An empty page that can be used on its own or navigated to within a Frame. 14 | /// 15 | public sealed partial class MessengerSendPage : Page 16 | { 17 | public MessengerSendPage() 18 | { 19 | this.InitializeComponent(); 20 | 21 | DataContext = Ioc.Default.GetRequiredService(); 22 | } 23 | 24 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)DataContext; 25 | 26 | /// 27 | protected override void OnNavigatedTo(NavigationEventArgs e) 28 | { 29 | ViewModel.SenderViewModel.IsActive = true; 30 | ViewModel.ReceiverViewModel.IsActive = true; 31 | } 32 | 33 | /// 34 | protected override void OnNavigatedFrom(NavigationEventArgs e) 35 | { 36 | ViewModel.SenderViewModel.IsActive = false; 37 | ViewModel.ReceiverViewModel.IsActive = false; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/ObservableObjectPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class ObservableObjectPage : Page 15 | { 16 | public ObservableObjectPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public ObservableObjectPageViewModel ViewModel => (ObservableObjectPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/ObservablePropertyAttributePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class ObservablePropertyAttributePage : Page 15 | { 16 | public ObservablePropertyAttributePage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/ObservableValidatorPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class ObservableValidatorPage : Page 15 | { 16 | public ObservableValidatorPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public ObservableValidatorPageViewModel ViewModel => (ObservableValidatorPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/PuttingThingsTogetherPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/PuttingThingsTogetherPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class PuttingThingsTogetherPage : Page 15 | { 16 | public PuttingThingsTogetherPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/RedditBrowserPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using Windows.UI.Xaml.Controls; 6 | 7 | namespace MvvmSampleUwp.Views; 8 | 9 | /// 10 | /// An empty page that can be used on its own or navigated to within a Frame. 11 | /// 12 | public sealed partial class RedditBrowserPage : Page 13 | { 14 | public RedditBrowserPage() 15 | { 16 | this.InitializeComponent(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/RedditServicePage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/RedditServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class RedditServicePage : Page 15 | { 16 | public RedditServicePage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/RelayCommandAttributePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class RelayCommandAttributePage : Page 15 | { 16 | public RelayCommandAttributePage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/RelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class RelayCommandPage : Page 15 | { 16 | public RelayCommandPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public RelayCommandPageViewModel ViewModel => (RelayCommandPageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SettingUpTheViewModelsPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SettingUpTheViewModelsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class SettingUpTheViewModelsPage : Page 15 | { 16 | public SettingUpTheViewModelsPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SettingsServicePage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SettingsServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class SettingsServicePage : Page 15 | { 16 | public SettingsServicePage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SourceGeneratorsPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/SourceGeneratorsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views; 10 | 11 | /// 12 | /// An empty page that can be used on its own or navigated to within a Frame. 13 | /// 14 | public sealed partial class SourceGeneratorsPage : Page 15 | { 16 | public SourceGeneratorsPage() 17 | { 18 | this.InitializeComponent(); 19 | 20 | DataContext = Ioc.Default.GetRequiredService(); 21 | } 22 | 23 | public SamplePageViewModel ViewModel => (SamplePageViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/Widgets/ContactsListWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels.Widgets; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views.Widgets; 10 | 11 | public sealed partial class ContactsListWidget : UserControl 12 | { 13 | public ContactsListWidget() 14 | { 15 | this.InitializeComponent(); 16 | 17 | DataContext = Ioc.Default.GetRequiredService(); 18 | } 19 | 20 | public ContactsListWidgetViewModel ViewModel => (ContactsListWidgetViewModel)DataContext; 21 | } 22 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/Widgets/PostWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels.Widgets; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views.Widgets; 10 | 11 | public sealed partial class PostWidget : UserControl 12 | { 13 | public PostWidget() 14 | { 15 | this.InitializeComponent(); 16 | 17 | DataContext = Ioc.Default.GetRequiredService(); 18 | 19 | this.Loaded += (s, e) => ViewModel.IsActive = true; 20 | this.Unloaded += (s, e) => ViewModel.IsActive = false; 21 | } 22 | 23 | public PostWidgetViewModel ViewModel => (PostWidgetViewModel)DataContext; 24 | } 25 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/Widgets/SubredditWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels.Widgets; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views.Widgets; 10 | 11 | public sealed partial class SubredditWidget : UserControl 12 | { 13 | public SubredditWidget() 14 | { 15 | this.InitializeComponent(); 16 | 17 | DataContext = Ioc.Default.GetRequiredService(); 18 | } 19 | 20 | public SubredditWidgetViewModel ViewModel => (SubredditWidgetViewModel)DataContext; 21 | } 22 | -------------------------------------------------------------------------------- /samples/MvvmSampleUwp/Views/Widgets/ValidationFormWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | // Licensed to the .NET Foundation under one or more agreements. 2 | // The .NET Foundation licenses this file to you under the MIT license. 3 | // See the LICENSE file in the project root for more information. 4 | 5 | using CommunityToolkit.Mvvm.DependencyInjection; 6 | using MvvmSample.Core.ViewModels.Widgets; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace MvvmSampleUwp.Views.Widgets 10 | { 11 | public sealed partial class ValidationFormWidget : UserControl 12 | { 13 | public ValidationFormWidget() 14 | { 15 | this.InitializeComponent(); 16 | 17 | DataContext = Ioc.Default.GetRequiredService(); 18 | } 19 | 20 | public ValidationFormWidgetViewModel ViewModel => (ValidationFormWidgetViewModel)DataContext; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with your package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeBrands.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeBrands.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeRegular.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeSolid.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Assets/FontAwesomeSolid.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Android.App; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("MvvmSampleXF.Android")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("MvvmSampleXF.Android")] 14 | [assembly: AssemblyCopyright("Copyright © 2014")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: ComVisible(false)] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | [assembly: AssemblyVersion("1.0.0.0")] 26 | [assembly: AssemblyFileVersion("1.0.0.0")] 27 | 28 | // Add some common permissions, these can be removed if not needed 29 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)] 30 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] 31 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable/headerBg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable/headerBg.jpg -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/layout/Tabbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/layout/Toolbar.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-anydpi-v26/icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-anydpi-v26/icon_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3750D1 4 | #3750D1 5 | #00289f 6 | #3750D1 7 | 8 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | 26 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.Android/SplashActivity.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Content; 3 | 4 | namespace MvvmSampleXF.Droid 5 | { 6 | [Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] 7 | public class SplashActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 8 | { 9 | protected override void OnResume() 10 | { 11 | base.OnResume(); 12 | StartActivity(new Intent(Application.Context, typeof(MainActivity))); 13 | } 14 | 15 | public override void OnBackPressed() { } 16 | } 17 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | 8 | namespace MvvmSampleXF.iOS 9 | { 10 | // The UIApplicationDelegate for the application. This class is responsible for launching the 11 | // User Interface of the application, as well as listening (and optionally responding) to 12 | // application events from iOS. 13 | [Register("AppDelegate")] 14 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 15 | { 16 | // 17 | // This method is invoked when the application has loaded and is ready to run. In this 18 | // method you should instantiate the window, load the UI into it and then make the window 19 | // visible. 20 | // 21 | // You have 17 seconds to return from this method, or iOS will terminate your application. 22 | // 23 | public override bool FinishedLaunching(UIApplication app, NSDictionary options) 24 | { 25 | global::Xamarin.Forms.Forms.Init(); 26 | LoadApplication(new App()); 27 | 28 | return base.FinishedLaunching(app, options); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/SplashScreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "appearances": [], 5 | "scale": "2x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "appearances": [], 10 | "scale": "3x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "appearances": [], 15 | "scale": "1x", 16 | "idiom": "universal", 17 | "filename": "StoreLogo..png" 18 | } 19 | ], 20 | "properties": {}, 21 | "info": { 22 | "version": 1, 23 | "author": "" 24 | } 25 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/SplashScreen.imageset/StoreLogo..png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/SplashScreen.imageset/StoreLogo..png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/headerBg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "appearances": [], 5 | "scale": "2x", 6 | "idiom": "universal" 7 | }, 8 | { 9 | "appearances": [], 10 | "scale": "3x", 11 | "idiom": "universal" 12 | }, 13 | { 14 | "appearances": [], 15 | "scale": "1x", 16 | "idiom": "universal", 17 | "filename": "headerBg.jpg" 18 | } 19 | ], 20 | "properties": {}, 21 | "info": { 22 | "version": 1, 23 | "author": "" 24 | } 25 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/headerBg.imageset/headerBg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Assets.xcassets/headerBg.imageset/headerBg.jpg -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | 8 | namespace MvvmSampleXF.iOS 9 | { 10 | public class Application 11 | { 12 | // This is the main entry point of the application. 13 | static void Main(string[] args) 14 | { 15 | // if you want to use a different Application Delegate class from "AppDelegate" 16 | // you can specify it here. 17 | UIApplication.Main(args, null, "AppDelegate"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MvvmSampleXF.iOS")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MvvmSampleXF.iOS")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-568h@2x.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-Portrait.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default-Portrait@2x.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/Default@2x.png -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeBrands.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeBrands.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeRegular.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeSolid.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CommunityToolkit/MVVM-Samples/7d67102cd25e918f7a687427225dfbabe9ec9deb/samples/MvvmSampleXF/MvvmSampleXF.iOS/Resources/FontAwesomeSolid.otf -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/AppShell.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Xamarin.Forms; 8 | using Xamarin.Forms.Xaml; 9 | 10 | namespace MvvmSampleXF 11 | { 12 | [XamlCompilation(XamlCompilationOptions.Compile)] 13 | public partial class AppShell : Shell 14 | { 15 | public AppShell() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms.Xaml; 2 | 3 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)] -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Controls/FlyoutHeader.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Controls/FlyoutHeader.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Xamarin.Forms; 8 | using Xamarin.Forms.Xaml; 9 | 10 | namespace MvvmSampleXF.Controls 11 | { 12 | [XamlCompilation(XamlCompilationOptions.Compile)] 13 | public partial class FlyoutHeader : ContentView 14 | { 15 | public FlyoutHeader() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Controls/InteractiveSample.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 9 | 12 | 14 | 16 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Controls/InteractiveSample.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | using Xamarin.Forms; 8 | using Xamarin.Forms.Xaml; 9 | 10 | namespace MvvmSampleXF.Controls 11 | { 12 | [XamlCompilation(XamlCompilationOptions.Compile)] 13 | public partial class InteractiveSample : ContentView 14 | { 15 | public static readonly BindableProperty CSharpCodeProperty = BindableProperty.Create(nameof(CSharpCode), typeof(string), typeof(InteractiveSample), string.Empty); 16 | public static readonly BindableProperty XamlCodeProperty = BindableProperty.Create(nameof(XamlCode), typeof(string), typeof(InteractiveSample), string.Empty); 17 | 18 | public string CSharpCode 19 | { 20 | get => (string)GetValue(CSharpCodeProperty); 21 | set => SetValue(CSharpCodeProperty, value); 22 | } 23 | 24 | public string XamlCode 25 | { 26 | get => (string)GetValue(XamlCodeProperty); 27 | set => SetValue(XamlCodeProperty, value); 28 | } 29 | public InteractiveSample() 30 | { 31 | InitializeComponent(); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Converters/IsSelfPostToWidthRequestConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Text; 5 | using Xamarin.Forms; 6 | 7 | namespace MvvmSampleXF.Converters 8 | { 9 | public class IsSelfPostToWidthRequestConverter : IValueConverter 10 | { 11 | public double WidthRequest { get; set; } 12 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 13 | { 14 | if (value is string str) 15 | { 16 | return str.Equals("self", StringComparison.OrdinalIgnoreCase) ? 0 : WidthRequest; 17 | } 18 | 19 | return 0d; 20 | } 21 | 22 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 23 | { 24 | throw new NotImplementedException(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Converters/TaskResultConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Xamarin.Forms; 7 | 8 | namespace MvvmSampleXF.Converters 9 | { 10 | public class TaskResultConverter : IValueConverter 11 | { 12 | public object? Convert(object value, Type targetType, object parameter, CultureInfo culture) 13 | { 14 | if (value is Task task) 15 | { 16 | return task.Status == TaskStatus.RanToCompletion ? task.Result : default; 17 | } 18 | 19 | return null; 20 | } 21 | 22 | public object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 23 | { 24 | throw new NotImplementedException(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Services/FileService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Reflection; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using MvvmSample.Core.Services; 9 | 10 | namespace MvvmSampleXF.Services 11 | { 12 | public sealed class FileService : IFilesService 13 | { 14 | public string InstallationPath => Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 15 | 16 | public async Task OpenForReadAsync(string path) 17 | { 18 | return await GetEmbeddedFileStreamAsync(GetType(), path); 19 | } 20 | 21 | 22 | private static async Task GetEmbeddedFileStreamAsync(Type assemblyType, string fileName) 23 | { 24 | await Task.Yield(); 25 | 26 | var manifestName = assemblyType.GetTypeInfo().Assembly 27 | .GetManifestResourceNames() 28 | .FirstOrDefault(n => n.EndsWith(fileName.Replace(" ", "_").Replace("\\", ".").Replace("/", "."), StringComparison.OrdinalIgnoreCase)); 29 | 30 | if (manifestName == null) 31 | { 32 | throw new InvalidOperationException($"Failed to find resource [{fileName}]"); 33 | } 34 | 35 | return assemblyType.GetTypeInfo().Assembly.GetManifestResourceStream(manifestName); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Services/SettingsService.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.Services; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using Xamarin.Essentials; 6 | 7 | namespace MvvmSampleXF.Services 8 | { 9 | public sealed class SettingsService : ISettingsService 10 | { 11 | private readonly IDictionary _properties = Xamarin.Forms.Application.Current.Properties; 12 | 13 | public T? GetValue(string key) 14 | { 15 | if (_properties.TryGetValue(key, out var value)) 16 | { 17 | return (T?)value; 18 | } 19 | 20 | return default; 21 | } 22 | 23 | public void SetValue(string key, T? value) 24 | { 25 | if (!_properties.ContainsKey(key)) 26 | { 27 | _properties.Add(key, value); 28 | } 29 | else 30 | { 31 | _properties[key] = value; 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/AsyncRelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class AsyncRelayCommandPage : ContentPage 11 | { 12 | public AsyncRelayCommandPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public AsyncRelayCommandPageViewModel ViewModel => (AsyncRelayCommandPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("AsyncRelayCommand"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/BuildingTheUIPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/BuildingTheUIPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class BuildingTheUIPage : ContentPage 11 | { 12 | public BuildingTheUIPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public SamplePageViewModel ViewModel => (SamplePageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("PuttingThingsTogether"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/IntroductionPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/IntroductionPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class IntroductionPage : ContentPage 11 | { 12 | public IntroductionPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public ObservableObjectPageViewModel ViewModel => (ObservableObjectPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("Introduction"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/IoCPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/IoCPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class IoCPage : ContentPage 11 | { 12 | public IoCPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public IocPageViewModel ViewModel => (IocPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("IoC"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/MessengerPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/MessengerPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class MessengerPage : ContentPage 11 | { 12 | public MessengerPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("Messenger"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/MessengerRequestPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class MessengerRequestPage : ContentPage 11 | { 12 | public MessengerRequestPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("Messenger"); 26 | ViewModel.SenderViewModel.IsActive = true; 27 | ViewModel.ReceiverViewModel.IsActive = true; 28 | } 29 | 30 | protected override void OnDisappearing() 31 | { 32 | base.OnDisappearing(); 33 | 34 | ViewModel.SenderViewModel.IsActive = false; 35 | ViewModel.ReceiverViewModel.IsActive = false; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/MessengerSendPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class MessengerSendPage : ContentPage 11 | { 12 | public MessengerSendPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public MessengerPageViewModel ViewModel => (MessengerPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("Messenger"); 26 | ViewModel.SenderViewModel.IsActive = true; 27 | ViewModel.ReceiverViewModel.IsActive = true; 28 | } 29 | 30 | protected override void OnDisappearing() 31 | { 32 | base.OnDisappearing(); 33 | 34 | ViewModel.SenderViewModel.IsActive = false; 35 | ViewModel.ReceiverViewModel.IsActive = false; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/ObservableObjectPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class ObservableObjectPage : ContentPage 11 | { 12 | public ObservableObjectPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public ObservableObjectPageViewModel ViewModel => (ObservableObjectPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("ObservableObject"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/PuttingThingsTogetherPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/PuttingThingsTogetherPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class PuttingThingsTogetherPage : ContentPage 11 | { 12 | public PuttingThingsTogetherPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public SamplePageViewModel ViewModel => (SamplePageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("PuttingThingsTogether"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/RedditBrowserPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using Xamarin.Forms; 4 | using Xamarin.Forms.Xaml; 5 | 6 | namespace MvvmSampleXF.Views 7 | { 8 | [XamlCompilation(XamlCompilationOptions.Compile)] 9 | public partial class RedditBrowserPage : ContentPage 10 | { 11 | public RedditBrowserPage() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | protected override void OnAppearing() 17 | { 18 | base.OnAppearing(); 19 | SubredditWidget.PostSelected += SubredditWidget_PostSelected; 20 | PostWidget.OnAppearing(); 21 | SubredditWidget.OnAppearing(); 22 | } 23 | 24 | protected override void OnDisappearing() 25 | { 26 | base.OnDisappearing(); 27 | SubredditWidget.PostSelected -= SubredditWidget_PostSelected; 28 | PostWidget.OnDisappearing(); 29 | } 30 | 31 | private void SubredditWidget_PostSelected(object sender, EventArgs e) 32 | { 33 | //Ugly workaround for https://github.com/xamarin/XamarinCommunityToolkit/issues/595 34 | MethodInfo dynMethod = RedditTabView.GetType().GetMethod("UpdateSelectedIndex", BindingFlags.NonPublic | BindingFlags.Instance); 35 | dynMethod?.Invoke(RedditTabView, new object[] { 1, false }); 36 | } 37 | 38 | } 39 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/RedditServicePage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/RedditServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class RedditServicePage : ContentPage 11 | { 12 | public RedditServicePage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public SamplePageViewModel ViewModel => (SamplePageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | ViewModel.LoadDocsCommand.Execute("PuttingThingsTogether"); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/RelayCommandPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class RelayCommandPage : ContentPage 11 | { 12 | public RelayCommandPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public RelayCommandPageViewModel ViewModel => (RelayCommandPageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("RelayCommand"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/SettingUpTheViewModelsPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/SettingUpTheViewModelsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class SettingUpTheViewModelsPage : ContentPage 11 | { 12 | public SettingUpTheViewModelsPage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public SamplePageViewModel ViewModel => (SamplePageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("PuttingThingsTogether"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/SettingsServicePage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/SettingsServicePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class SettingsServicePage : ContentPage 11 | { 12 | public SettingsServicePage() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public SamplePageViewModel ViewModel => (SamplePageViewModel)BindingContext; 20 | 21 | protected override void OnAppearing() 22 | { 23 | base.OnAppearing(); 24 | 25 | ViewModel.LoadDocsCommand.Execute("PuttingThingsTogether"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/Widgets/PostWidget.xaml: -------------------------------------------------------------------------------- 1 |  2 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 29 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/Widgets/PostWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels.Widgets; 2 | using CommunityToolkit.Mvvm.DependencyInjection; 3 | 4 | using Xamarin.Forms; 5 | using Xamarin.Forms.Xaml; 6 | 7 | namespace MvvmSampleXF.Views.Widgets 8 | { 9 | [XamlCompilation(XamlCompilationOptions.Compile)] 10 | public partial class PostWidget : ContentView 11 | { 12 | public PostWidget() 13 | { 14 | InitializeComponent(); 15 | 16 | BindingContext = Ioc.Default.GetRequiredService(); 17 | } 18 | 19 | public PostWidgetViewModel ViewModel => (PostWidgetViewModel)BindingContext; 20 | 21 | public void OnAppearing() 22 | { 23 | ViewModel.IsActive = true; 24 | } 25 | 26 | public void OnDisappearing() 27 | { 28 | ViewModel.IsActive = false; 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /samples/MvvmSampleXF/MvvmSampleXF/Views/Widgets/SubredditWidget.xaml.cs: -------------------------------------------------------------------------------- 1 | using MvvmSample.Core.ViewModels.Widgets; 2 | using System; 3 | using CommunityToolkit.Mvvm.DependencyInjection; 4 | 5 | using Xamarin.Forms; 6 | using Xamarin.Forms.Xaml; 7 | 8 | namespace MvvmSampleXF.Views.Widgets 9 | { 10 | [XamlCompilation(XamlCompilationOptions.Compile)] 11 | public partial class SubredditWidget : ContentView 12 | { 13 | public event EventHandler? PostSelected; 14 | public SubredditWidget() 15 | { 16 | InitializeComponent(); 17 | 18 | BindingContext = Ioc.Default.GetRequiredService(); 19 | } 20 | 21 | public SubredditWidgetViewModel ViewModel => (SubredditWidgetViewModel)BindingContext; 22 | 23 | private void CollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e) 24 | { 25 | PostSelected?.Invoke(this, EventArgs.Empty); 26 | } 27 | 28 | public void OnAppearing() 29 | { 30 | ViewModel.LoadPostsCommand.Execute(null); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /samples/NuGet.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | --------------------------------------------------------------------------------