ViewModelから画面を閉じる処理
ViewModelから画面を閉じる処理
画面を閉じる処理を通して処理の追加方法の例を示します。
見やすいよう一部省略や改行位置を変更しています。
Action
View側の画面を閉じる処理。
using Prism.Interactivity.InteractionRequest;
using System.Windows;
using System.Windows.Interactivity;
namespace Sample.ViewUtilities {
public class CloseWindowAction : TriggerAction<DependencyObject> {
protected override void Invoke(object parameter) {
if (parameter is InteractionRequestedEventArgs e) {
Invoke(AssociatedObject, e);
}
}
private void Invoke(DependencyObject sender,
InteractionRequestedEventArgs e) {
if (sender is Window window) {
window.Close();
e.Callback?.Invoke();
}
}
}
}
ViewModel
Viewに画面を閉じる処理を指示。
public InteractionRequest<Notification> CloseWindowRequest { get; private set; }
public DelegateCommand CloseWindowCommand { get; private set; }
public SampleWindowViewModel() {
CloseWindowRequest = new InteractionRequest<Notification>();
CloseWindowCommand = new DelegateCommand(ExecuteCloseWindowCommand,
CanExecuteCloseWindowCommand);
}
private bool CanExecuteCloseWindowCommand() {
return true;
}
private void ExecuteCloseWindowCommand() {
CloseWindowRequest.Raise(null);
}
XAML
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="http://www.codeplex.com/prism"
xmlns:ViewUtilities="clr-namespace:Sample.ViewUtilities"
・・・
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger
SourceObject="{Binding CloseWindowRequest}">
<ViewUtilities:CloseWindowAction/>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
・・・
<Window.InputBindings>
<KeyBinding Modifiers="Ctrl" Key="W"
Command="{Binding CloseWindowCommand, Mode=OneWay}"/>
</Window.InputBindings>
・・・
<Menu>
<MenuItem Header="ファイル(_F)">
<MenuItem Header="閉じる(_X)"
Command="{Binding CloseWindowCommand, Mode=OneWay}"/>
</MenuItem>
</Menu>
Author And Source
この問題について(ViewModelから画面を閉じる処理), 我々は、より多くの情報をここで見つけました https://qiita.com/saba-miso/items/1f371c6e7d44f408f520著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .