2011-11-08 7 views
0

子コントロールの1つにコンテキストメニューを持つユーザーコントロールがあります。
コマンドは、ViewModelのRelayCommandにバインドされています。
ただし、コマンドはビュー内の別の子コントロールを操作する必要があります。
これを行うにはどうすればよいですか?私は、パラメータとして所望の子コントロールを渡して試してみましたが、私は構文が間違っていると思う:SL4:ビューの要素をViewModelのCommandにパラメータとして渡す

     <Controls:ContextMenu > 
         <Controls:MenuItem Header="Center" > 
          <i:Interaction.Triggers> 
           <i:EventTrigger EventName="Click" > 
            <GalaSoft_MvvmLight_Command:EventToCommand 
             Command="{Binding RecenterCommand}" 
             CommandParameter="{Binding ElementName=scrollViewer}" /> 
           </i:EventTrigger> 
          </i:Interaction.Triggers> 
         </Controls:MenuItem> 
        </Controls:ContextMenu> 

コマンド:私はコンテキストメニューを使用する場合

RecenterCommand = new RelayCommand<ScrollViewer>(Recenter); 
private void Recenter(ScrollViewer obj) 
{ 
}  

は、recenterは()が呼び出され、 obj paramはnullです。
CommandParameterバインディングのElementName属性の正しい構文は何ですか?

UPDATE:私はCommandParameterを変えてみました:

CommandParameter="{Binding ElementName=LayoutRoot, Path=scrollViewer}" 

...しかし、まだ動作しません。

<GalaSoft_MvvmLight_Command:EventToCommand PassEventArgsToCommand="True": 
            Command="{Binding RecenterCommand}" 
            CommandParameter="{Binding ElementName=scrollViewer}" /> 

、あなたがカテーテル検査したい場合:私はあなたがそうPassEventArgsToCommand =「true」を追加する必要があると思い

+0

実際にあなたの要素はx:Name = scrollViewerですか? – ecathell

+0

はい、それです: Number8

答えて

0

、コードは次のようになります任意の洞察力のための

おかげで....置く分離コード内のデータは、私はトンを願っています

雇用者として

SelectedEmployer E =((のMenuItem)e)の.DataContext(これは、コンテキストメニュー項目に使用する私のプログラムの一つからのコードです)あなたの問題を解決する方法をヒントにしてくれたので、彼はあなたの問題を解決します。

+0

返信いただきありがとうございます。 RelayCommand を使用すると、RoutedEventArgs.OriginalSourceはnullになります。 RelayCommmand を試すと、PassEventArgsToCommandを使用できません - RoutedEventArgsをScrollViewerにキャストできないという例外が発生します。 – Number8

+0

RelayCommand とCommandParameterを使用する場合、コマンドに渡されるScrollViewerパラメータはnullです。 CommandParameterの構文が間違っているのではないかと思います。 – Number8

関連する問題