前提・実現したいこと
MainWindowに初期表示したログイン画面(UserControl)のログインボタン押下で次の画面に遷移させたい。
Prism自体がまだよくわかっていませんが、とりあえずネットで調べて以下のようなソースを作ってみました。
試したこと
1.App.Xaml.cs
遷移先の画面を登録
public partial class App { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<LoginControl>(); containerRegistry.RegisterForNavigation<MainControl>(); } }
2.MainWindow
ViewModelのコンストラクタでログイン画面(LoginControl)を初期画面として指定 ※ログイン画面はUserControl
public MainWindowViewModel(IRegionManager regionMan) { regionMan.RegisterViewWithRegion("ContentRegion", typeof(LoginControl)); }
3.LoginControl
Viewのボタンにコマンド指定
<UserControl x:Class="XXX.Views.UserControls.LoginControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" d:DesignHeight="735" d:DesignWidth="1018"> <Grid Height="Auto"> <Button Content="ログイン" Command="{Binding NavigateCommand}" /> </Grid> </UserControl
ViewModelでコマンドの処理 ※メイン画面へ遷移する処理
public class LoginControlViewModel : BindableBase { public ReactiveCommand NavigateCommand { get; } public LoginControlViewModel(IRegionManager regionMan) { this.NavigateCommand = new ReactiveCommand() .WithSubscribe(() => { regionMan.RequestNavigate("ContentRegion", typeof(MainControl).Name); } .AddTo(this.disposables); } }
※とりあえず、遷移させたいのでログイン処理は書いていません。
※MainWindowのviewは"ContentRegion"をRegion指定したContentControlを置いているだけです。
発生している問題・エラーメッセージ
viewのLoginControlは表示されるのですが、ログインボタンを押下してもうんともすんとも言いません。
デバック実行で確認したところ、LoginControlのViewModelが呼ばれていない(コンストラクタにブレークポイントを貼っても止まらない)
ので、そこが原因っぽい気もしますが何が問題なのかわからず。。。
ご教示いただければと思います。
補足情報(FW/ツールのバージョンなど)
ReactiveProperty
Prism7.2
回答1件
あなたの回答
tips
プレビュー