0

子コントロールの1つにコンテキストメニューを備えたユーザーコントロールがあります。
コマンドは、ViewModelのRelayCommandにバインドされています。
ただし、コマンドはビュー内の別の子コントロールに作用する必要があります。
これを行うための最良の方法は何ですか?目的の子コントロールをパラメーターとして渡そうとしましたが、構文が正しくないと思います。

                        <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パラメータがnullです。
CommandParameterバインディングのElementName属性の正しい構文は何ですか?

更新:CommandParameterを次のように変更してみました:

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

...しかし、それでも機能しません。

洞察をありがとう....

4

1 に答える 1

0

PassEventArgsToCommand = "True"を追加する必要があると思うので、コードは次のようになります。

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

また、コードビハインドプットでデータを取得したい場合(これは、コンテキストメニュー項目に使用される私のプログラムの1つからのコードです)

SelectedEmployer e =((MenuItem)e).DataContext as Employer

私の問題の1つを解決する方法のヒントを教えてくれたので、これで問題が解決することを願っています。

于 2011-11-09T18:14:06.577 に答える