2011-10-21 7 views
1

EventToCommandがロードイベントでコマンドパラメータを渡すのに失敗するMVVMLight EventToCommandとPage Loadイベントを使用してCommandParameterを渡しますか?

ページまたはユーザーコントロールのLoadイベントに接続すると、EventToCommandはViewModelのハンドラを正常に呼び出しますが、CommandParameterは渡しません。ただし、同じXAMLが別のイベント(ボタンクリックなど)にアタッチされている場合、コマンドハンドラはデータバインドされたデータをそのパラメータとして受け取ります。 XAML:

<i:EventTrigger EventName="Loaded" SourceObject="{Binding ElementName=Control}"> <Command:EventToCommand x:Name="etcLoad" Command="{Binding LoadCommand}" CommandParameter="{Binding Target, ElementName=Control}" /> </i:EventTrigger>

ターゲットは表示上の文字列DPです。

VMコード:

internal void Load(string p_Param) 
    { 
     this.Initialise(); 
    } 

    public RelayCommand<string> LoadCommand { get; private set; } 

とコマンドはそう割り当てられます。

this.LoadCommand = new RelayCommand<string>(this.Load); 

私はバインディングがターゲットDPかに割り当てよりも後に行われていると問題があることはほぼ確実です似たような。私は、このASAPや他の方法で、文字列がOnNavigateToのオーバーライドから割り当てられたViewModelに文字列を渡す可能性のある解決策を見つけることに興味があります。目的は、URIを介して供給されるクエリプロパティ、すなわち「/ Views/DisplayTabDetails?Tab = Tab1」または同様のものに基づいてタブの選択を提供することである。

答えて

4

イベントの引数をコマンドに渡す必要があることを示すには、PassEventArgsToCommandプロパティを使用します。あなたのXAMLでは、あなたは、そのため、使用する必要があります。

<i:EventTrigger EventName="Loaded" 
       SourceObject="{Binding ElementName=Control}"> 
    <Command:EventToCommand x:Name="etcLoad" 
          Command="{Binding LoadCommand}" 
          PassEventArgsToCommand="True" /> 
</i:EventTrigger> 

編集

いくつかのイベントが発生し、ユーザとの対話の前に行うことができます。この場合に通常取られるアプローチは、コードからコマンドを呼び出すことです。 this postでは、コンセプトを見ることができます。明らかに、ロードされたイベントやニーズにコンセプトとその理由を同じに変更する必要があります。

+0

はい、これは可能ですが、 'public RelayCommand LoadCommand {get;}を使用するLoadイベントの場合は可能です。プライベートセット;} 'は、コマンドハンドラ上のパラメータのためにヌル値になります。今ここに来ている時間的側面を持つものがあるように見えます - パラメータは設定されていません。 – Intelligence4

+0

問題の解決策へのリンクと、ここにいくつかの行を追加しました。私はサンプルを直接投稿していただろうが、モバイルデバイスにコードを書くことは背後にある痛みである...残念だが、サンプルがまだ助けてくれることを願っている! – AxelEckenberger

関連する問題