├── .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 |
--------------------------------------------------------------------------------
/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 |
20 |
21 |
22 |
23 |
24 |
25 |
29 |
34 |
39 |
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 |
--------------------------------------------------------------------------------