2012-01-13 10 views
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> 

Как это работает сейчас. Что делать, если я хочу привязать каждое событие DoubleClick от ListBoxItem к RelayCommand?Как использовать EventToCommand в ItemContainerStyle?

+0

вы можете предоставить некоторую информацию о 'EventToCommand' функции? – stukselbax

+0

@stukselbax: как показывает один из тегов, это класс в mvvm-свете. – CuiPengFei

+0

Возможно, это Q & A полезно: http://stackoverflow.com/questions/1878362/mvvmlight-eventtocommand-and-wpftoolkit-datagrid-double-click – Clemens

ответ

0

Так я использую функцию MVVMLight EventToCommand.

Если у вас есть крючок для события с двойным щелчком. Если это невозможно, возьмите (preview) mousedown и проверьте clickCount в команде args. ClickCount of 2 соответствует двойному щелчку.

Обратите внимание: у меня есть собственная реализация RelayCommand. Один из инструментов MVMMLight может выглядеть по-другому.

XAML:

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

ViewModel:

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 
    } 
} 
-2

Лучший способ сделать это - просто использовать обычный обработчик событий, записанный в коде. При необходимости это может передать метод или команду на вашу модель или модель представления.

Трюки, подобные использованию поведения EventToCommand, просто обойдутся вам с точки зрения более сложного XAML и довольно высокого риска того, что вы будете утечки памяти. (Это происходит потому, что EventToCommand слушает событие CanExecuteChanged, даже если оно не должно.)