私がやっていることのポイントは、ビューモデルで発生する必要があることがたくさんあるということですが、コンストラクターではなく、ビューがロードされたときです。イベント ハンドラーを接続してメッセージを送信することもできますが、それはちょっと雑に思えます。このロジックが含まれている基本ビューと基本ビューモデルを実装しているので、すべてのビューがデフォルトで取得されることを願っています。
おそらく、私が望んでいるもの、つまり送信者を取得することさえできません。これがRoutedEventArgs.OriginalSourceが本来あるべきものだと思いましたか?
[編集] とりあえず、xaml.cs に EventHandler を接続しましたが、案の定、OriginalSource もそこで null です。したがって、コマンドでもビュー/送信者への参照を取得できるかどうかを知る必要があると思いますか? [/編集]
私の実装では、「ウィンドウ」の作成を担当するビューモデルへのヘルパー クラスが、すべてのウィンドウが追加される「ホスト」コントロールを認識している必要があります。eventtocommand を使用する範囲外でこれを達成するための提案を受け入れます。:)
(Unloaded のコードは同じです)
#region ViewLoadedCommand
private RelayCommand<RoutedEventArgs> _viewLoadedCommand = null;
/// <summary>
/// Command to handle the control's Loaded event.
/// </summary>
public RelayCommand<RoutedEventArgs> ViewLoadedCommand
{
get
{
// lazy-instantiate the RelayCommand on first usage
if (_viewLoadedCommand == null)
{
_viewLoadedCommand = new RelayCommand<RoutedEventArgs>(
e => this.OnViewLoadedCommand(e));
}
return _viewLoadedCommand;
}
}
#endregion ViewLoadedCommand
#region View EventHandlers
protected virtual void OnViewLoadedCommand(RoutedEventArgs e)
{
EventHandler handler = ViewLoaded;
if (handler != null)
{
handler(this, e);
}
}
#endregion