0
        <ListBox Grid.Row="1" ItemsSource="{Binding Source}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" DisplayMemberPath="Name">
        <ListBox.ItemContainerStyle>
            <Style>
                <EventSetter Event="ListBoxItem.MouseDoubleClick" Handler="DoubleClick" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

これが現在の仕組みです。すべての ListBoxItem の DoubleClick イベントを RelayCommand にバインドしたい場合はどうすればよいですか?

4

2 に答える 2

0

これは、私が MVVMLight EventToCommand 機能を使用している方法です。

それにダブルクリックイベントフックがある場合。それが利用できない場合は、(プレビュー) マウスダウンを取り、コマンド引数の clickCount を確認してください。2 の ClickCount は、ダブルクリックに対応します。

注意: 私は独自の RelayCommand 実装を持っています。MVMMLight ツールキットのものは、見た目が異なる場合があります。

XAML:

<interactivity:Interaction.Triggers>
    <interactivity:EventTrigger EventName="MouseDown">
        <mvvmLight:EventToCommand PassEventArgsToCommand="True" Command="{Binding MouseDownCommand}"></mvvmLight:EventToCommand>
    </interactivity:EventTrigger>
</interactivity:Interaction.Triggers>

ビューモデル:

public ICommand MouseDownCommand
{
  get
  {
    if (_mouseDownCommand == null)
    {
      _mouseDownCommand = new RelayCommand(x => MouseDown(x as MouseButtonEventArgs));
    }
    return _mouseDownCommand;
  }
}

private void MouseDown(MouseButtonEventArgs e)
{
  if (e.ClickCount == 2)
  {
    // do stuff
  }
}
于 2012-01-13T11:18:22.043 に答える
-2

これを行う最善の方法は、分離コードで記述された通常のイベント ハンドラーを使用することです。必要に応じて、モデルまたはビューモデルのメソッドまたはコマンドに中継できます。

EventToCommand 動作を使用するようなトリックは、より複雑な XAML と、メモリ リークのリスクが非常に高くなるという点でコストがかかります。(これは、EventToCommand が CanExecuteChanged イベントをリッスンする必要がない場合でもリッスンするために発生します。)

于 2012-01-13T09:30:46.227 に答える