2

EventToCommand は、Load イベントでコマンド パラメーターを渡すことができません

ページまたはユーザー コントロールの 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 の解決策、または View から文字列を取得し、OnNavigateTo オーバーライドから文字列が割り当てられている ViewModel に文字列を取得する他の方法を見つけることに興味があります。目標は、「/Views/DisplayTabDetails?Tab=Tab1」などの URI を介して提供されるクエリ プロパティに基づいてタブを選択できるようにすることです。

4

1 に答える 1

5

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

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

編集

一部のイベントは、ユーザー インタラクションが発生する前に発生します。この場合に通常取られるアプローチは、コード ビハインドからコマンドを呼び出すことです。この投稿では、概念を確認できます。明らかに、それをロードされたイベントに変更する必要があり、ニーズ、概念とその理由は同じです。

于 2011-10-21T15:43:24.733 に答える