2012-01-13 28 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> 

這是它現在的工作原理。 如果我想將每個ListBoxItem的DoubleClick事件綁定到RelayCommand,我應該怎麼做?如何在ItemContainerStyle中使用EventToCommand?

+0

可以提供約'EventToCommand'功能一些更多的信息? – stukselbax 2012-01-13 07:10:03

+0

@stukselbax:正如其中一個標籤所暗示的那樣,它是mvvm-light中的一個類。 – CuiPengFei 2012-01-13 07:22:27

+0

也許這個問答很有幫助:http://stackoverflow.com/questions/1878362/mvvmlight-eventtocommand-and-wpftoolkit-datagrid-double-click – Clemens 2012-01-13 09:02:26

回答

0

這是我使用MVVMLight EventToCommand功能的方式。

如果你有一個doubleclick事件鉤子。如果不可用,則使用(預覽)mousedown並檢查命令參數中的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 
    } 
} 
-2

這樣做的最好方法是隻使用在代碼隱藏中編寫的普通事件處理程序。如果需要,這可以轉發到模型或視圖模型上的方法或命令。

像使用EventToCommand行爲這樣的竅門只會讓你更加複雜的XAML和一個相當高的風險,你會泄漏內存。 (發生這種情況是因爲EventToCommand即使不應該也會偵聽CanExecuteChanged事件。)

相關問題