C#
WPF
Xaml
MVVM
PRISM

MVVMでウインドウを閉じる

やりたいこと

ViewModelからウインドウを閉じる。

実装

ウインドウを閉じるトリガーアクションを作成する。

トリガーアクション
using System.Windows;
using System.Windows.Interactivity;

namespace Sample {
    public class CloseWindowAction : TriggerAction<FrameworkElement> {
        protected override void Invoke(object parameter)
            => Window.GetWindow(AssociatedObject).Close();
    }
}

使い方

XAML
<Window x:Class="Sample.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:Sample"
        Title="MainView" Height="300" Width="300">
    <i:Interaction.Triggers>
        <prism:InteractionRequestTrigger SourceObject="{Binding CloseWindowRequest, Mode=OneWay}">
            <local:CloseWindowAction/>
        </prism:InteractionRequestTrigger>
    </i:Interaction.Triggers>
    <Grid>
        <TextBox />
    </Grid>
</Window>
ViewModel
using Prism.Interactivity.InteractionRequest;
using System.Windows;

namespace Sample {
    public class MainViewModel {
        public InteractionRequest<Notification> CloseWindowRequest { get; }
            = new InteractionRequest<Notification>();

        private void CloseWindow()
            => CloseWindowRequest.Raise(null);
    }
}