1. ホーム
  2. c#

[解決済み] コードの後ろからコマンドを呼び出す

2023-06-19 18:44:37

質問

いろいろと調べてみたのですが、正確な方法がわかりません。 私はMVVMを使用してユーザーコントロールを作成しており、「Loaded」イベントでコマンドを実行したいと思っています。 これは、コードの後ろに少し必要であることを理解していますが、何が必要なのかがよくわかりません。 コマンドはビューのデータコンテキストとして設定されているViewModelにありますが、ロードされたイベントの後ろのコードからそれを呼び出すことができるように、これをルーティングする方法がよく分かりません。 基本的に私が欲しいのはこのようなものです...

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    //Call command from viewmodel
}

周りを見渡しても、このための構文はどこにも見つからないようです。 コマンドを参照できるようにするには、まず xaml でコマンドをバインドする必要があるのでしょうか? ユーザー コントロール内のコマンド バインディング オプションは、ボタンのようなものの中でできるようにコマンドをバインドすることができないことに気づきました...

<UserControl.CommandBindings>
    <CommandBinding Command="{Binding MyCommand}" /> <!-- Throws compile error -->
</UserControl.CommandBindings>

簡単な方法があると思うのですが、どうしてもわかりません。

どのように解決するのですか?

DataContextがすでに設定されている場合は、それをキャストしてコマンドを呼び出すことができます。

var viewModel = (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(null))
    viewModel.MyCommand.Execute(null);

(必要に応じてパラメータを変更)