#はじめに
WPF学習中のため自分用に記載していきます。
間違い、不足などありましたらコメントをよろしくお願いします。
#●別画面の表示方法
ViewModelからViewを開きたいときはMessengerを送ることで実現する。
Livet.Behaviors.Messaging 名前空間には Livet の Messenger などから送られたメッセージを受け取ることの出来る Action が用意されています。この Action は Messenger からメッセージを受け取るだけではなく、EventTrigger などから Action を起動することが出来るようになっています。
※引用元:(https://github.com/runceel/Livet)
#View側のソース
InteractionMessageTriggerを設定してActionを指定する。
TransitionInteractionMessageActionで別画面を起動する。
Mode(画面の表示方法)
Normal:別画面を表示中に他の画面の操作が可能
Modal:別画面を表示中は他の画面の操作が不可能
<behaviors:Interaction.Triggers>
<l:InteractionMessageTrigger MessageKey="OpenMessageKey" Messenger="{Binding Messenger}">
<l:TransitionInteractionMessageAction WindowType="{x:Type v:SubWindow}" Mode="Normal"/>
</l:InteractionMessageTrigger>
</behaviors:Interaction.Triggers>
<Grid>
<StackPanel VerticalAlignment="Center" >
<TextBox Text="{Binding Text}" />
<Button Content="Open" Command="{Binding OpenCommand}" />
</StackPanel>
</Grid>
#ViewModel側のソース
Messengerを使用してメッセージを送る。
ViewModel側で指定したメッセージキーが一致するInteractionMessageTriggerが実行される。
private string text;
public string Text { get => text; set => RaisePropertyChangedIfSet(ref text, value); }
private ViewModelCommand openCommand;
public ViewModelCommand OpenCommand => openCommand ??= new ViewModelCommand(ShowDetailWindow);
private void ShowDetailWindow()
{
Messenger.Raise(new TransitionMessage(new SubWindowViewModel(text), "OpenMessageKey"));
}
#・環境
VisualStudio2019
.Net Core3.0
Livet v3.2.1
#・参照
[GitHub Livet]
(https://github.com/runceel/Livet)