Skip to main content
MonoAndroid11.0Xamarin.iOS1.0Xamarin.Mac2.0.NETStandard2.0

Common MVVM Level Interactions(like open/save file) for WPF/UWP/WinUI/Uno/Avalonia platforms ⭐ Last 10 features: - feat: Removed ReactiveUI dependency. 2022-08-22 - feat: To IsExternalInit package. 2022-08-22 - feat: Updated NuGet packages. 2022-08-11 - feat: Updated NuGet packages. 2022-07-11 - feat: Published WebAssembly app. 2022-07-01 - feat: Updated NuGet packages. 2022-07-01 - feat: To DependencyPropertyGenerator. 2022-06-29 - feat: Updated NuGet packages. 2022-06-29 - feat: Added BaseConverter DefaultConvertValue/DefaultConvertBackValue. 2022-06-24 - feat: Updated NuGet packages. 2022-03-25 🐞 Last 10 bug fixes: - fix: To WinRT.Interop. 2022-07-14 - fix: Disabled linker. 2022-07-01 - fix: Fixed Uno targets. 2022-03-18 - fix: Fixed missing Warning ContentDialog. 2022-03-17 - fix(apps): Fixed Uno.WinUI webassembly app. 2022-01-19 - fix: Fixed package description. 2021-12-22 - fix(Avalonia): Changed BaseConverter null values to UnsetValue. 2021-12-15 - fix(Avalonia): Fixed OpenFileDialog Filters bug. 2021-12-11 - fix: Fixed CI to release avalonia. 2021-12-10 - fix(apps.Avalonia): Fixed FileInteractions. 2021-12-09

Published
Aug 22, 2022
4y ago
Total Downloads
3.7K
3,680

Deprecated Package Version

Reason: Legacy

Install

dotnet add package Mvvm.CommonInteractions.Uno --version 1.0.57
ProductVersions
.NET Standard
netstandard2.0
MonoAndroid
monoandroid11.0
Other
Xamarin.Mac2.0Xamarin.iOS1.0

README

Mvvm.CommonInteractions

Common MVVM Level Interactions(like open/save file) for WPF/UWP/WinUI/Uno/Avalonia platforms. Features:

  • Enables drag-and-drop support at the ViewModel level.
  • Wide choice of platforms
  • Dependency injection friendly

NuGet

NuGet NuGet NuGet NuGet NuGet NuGet

Install-Package Mvvm.CommonInteractions.Core
Install-Package Mvvm.CommonInteractions.Wpf
Install-Package Mvvm.CommonInteractions.Uno
Install-Package Mvvm.CommonInteractions.Uwp
Install-Package Mvvm.CommonInteractions.WinUI
Install-Package Mvvm.CommonInteractions.Avalonia

Usage

Add to your App constructors:


public sealed partial class App
{
    private IHost AppHost { get; }

    public App()
    {
        AppHost = Host
            .CreateDefaultBuilder()
            .ConfigureServices(static services =>
            {
                services.AddSingleton<IFileInteractions, FileInteractions>();
                services.AddSingleton<IMessageInteractions, MessageInteractions>();
                services.AddSingleton<IWebInteractions, WebInteractions>();
            })
            .Build();

        // Optional. Displays unhandled exceptions using MessageInteractions.Exception.
        AppHost.Services.GetRequiredService<IMessageInteractions>().CatchUnhandledExceptions(this);

        // your code
    }
}

FileInteractions

// Open
var file = await FileInteractions.OpenFileAsync(new OpenFileArguments
{
    SuggestedFileName = "my.txt",
    Extensions = new[] { ".txt" },
    FilterName = "My txt files",
});
if (file == null)
{
    return;
}
var text = await file.ReadTextAsync().ConfigureAwait(true);

// Save (you need to save file from previuos step)
await file.WriteTextAsync(text).ConfigureAwait(false);

// Save As
var file = await FileInteractions.SaveFileAsync(new SaveFileArguments(".txt")
{
    SuggestedFileName = "my.txt",
    FilterName = "My txt files",
});
if (file == null)
{
    return;
}
await file.WriteTextAsync(text).ConfigureAwait(false);

MessageInteractions

await MessageInteractions.ShowMessageAsync("Message");
await MessageInteractions.ShowWarningAsync("Warning");
await MessageInteractions.ShowExceptionAsync(new InvalidOperationException("Exception"));
bool question = await MessageInteractions.ShowQuestionAsync(new QuestionData("Are you sure?"));

WinUI requires a window to display the ContentDialog, so you'll need to set it explicitly in your App.OnLaunched:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
#if HAS_WINUI
    var window = new Window();
    MessageInteractions.Window = window;
#endif
}

WebInteractions

await WebInteractions.OpenUrlAsync("https://www.google.com/");

DragAndDropExtensions

// WPF
xmlns:dragAndDrop="clr-namespace:Mvvm.CommonInteractions;assembly=Mvvm.CommonInteractions.Wpf" 
// UWP/Uno
xmlns:dragAndDrop="using:Mvvm.CommonInteractions"
<Element
    AllowDrop="True"
    dragAndDrop:DragAndDropExtensions.DragFilesEnterCommand="{Binding DragFilesEnter}"
    dragAndDrop:DragAndDropExtensions.DragTextEnterCommand="{Binding DragTextEnter}"
    dragAndDrop:DragAndDropExtensions.DragLeaveCommand="{Binding DragLeave}"
    dragAndDrop:DragAndDropExtensions.DropFilesCommand="{Binding DropFiles}"
    dragAndDrop:DragAndDropExtensions.DropTextCommand="{Binding DropText}"
    >

Command arguments: DragFilesEnterCommand - FileData[] - Array of files.
DragTextEnterCommand - string - Text.
DragLeaveCommand - null.
DropFilesCommand - FileData[] - Array of files.
DropTextCommand - string - Text.

Contacts

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

NuGet marks this package as deprecated. Review the publisher's migration guidance before adopting it.Compatibility metadata lists 4 target frameworks; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.