ええと、あなたはすでに答えを知っていると思います...とにかく...あなたが間違ったことは、XAMLでイベントをコマンドにバインドしていて、コマンドがありませんでした:)基本的に、標準の「コードビハインドアプローチ」を台無しにしました「MVVMアプローチ」/バインディングとしましょう。
したがって、コードビハインドに触れてDoSomethingEventHandler
そこに作成すると、単純に
<UserControl .. Loaded="UserControl_Loaded">
..
</UserControl>
CodeBehindで:
private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
// Do Something
}
それは大丈夫でしょう...しかしそれはMVVMではありません:]
さて、あなたの新しいアプローチ(コードビハインドなし/ MVVMとしましょう)...
Prism v4.1を使用している場合は、Prismでほとんどの人が見逃しているこの機能をここで確認できます:)しかし、言及されている解決策があります:)
ICommand
バインドする必要があることを知っているので...必要DelegateCommand
なものを使用できる必要はありません...(私は好み、使用しますRelayCommand
)
さて、しかし、私たちは前述のリンクから何を学びましたか?
- 時々...今回は...
ICommand
コントロールが有効な状態を変更でき、使用せずに使用Prism's Interactivity
しただけでは更新されBlend SDK's Interactivity
ません...今回は必要ありません...認めます...しかし多分いつか:)
- そして、とにかくそれらを取得しないので、ハンドラーでそれらのばかげたパラメーターは必要ありません:D(これらのArgsが必要な場合は、たとえばMVVM Lightを使用できます。)
だからあなたができる最善のことはこれです:
<UserControl
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="clr-namespace:Microsoft.Practices.Prism.Interactivity;assembly=Microsoft.Practices.Prism.Interactivity"
...
>
...
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<prism:InvokeCommandAction Command="{Binding MyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
たとえば、ViewModelは次のようになります。
public ICommand MyCommand
{
get
{
return new RelayCommand(this.MyCommandExecute);
}
}
private void MyCommandExecute()
{
// DO Something...
}
すでに回答済みの質問に答えてしまったことをお詫びしますが、興味深い情報を追加するかもしれないと思いました:)