2014-01-09 117 views
0

我有來自observablecollection的項目的列表框。雙擊所選ListBox項目

<ListBox Name="listBoxData" 
      DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" 
      ItemTemplate="{DynamicResource BookTemplate}"         
      ItemsSource="{Binding Books, UpdateSourceTrigger=PropertyChanged}" 
      SelectedItem="{Binding SelectedBook, Mode=TwoWay}"> 

問題是如何在所選項目上連線雙擊動作?

我不避開背後的代碼(目前是空的,我所有的邏輯都在mvvm內)。

+0

重複的http://stackoverflow.com/questions/2547442/wpf-listboxitem-double-click – Adrao

回答

0

你的最後一行有點令人困惑......對我來說,它表示「解決方案背後的代碼是好的」,但是你提到了MVVM,所以我不確定。無論哪種方式,這裏給你一個簡單的答案。聲明ListBox

<ListBox SelectionChanged="ListBox_SelectionChanged" /> 

然後在後面的代碼,假設單一選擇模式:

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ListBoxItem listBoxItem = (ListBoxItem)e.AddedItems[0]; 
    listBoxItem.PreviewMouseDoubleClick += ListBoxItem_PreviewMouseDoubleClick; 
    listBoxItem = (ListBoxItem)e.RemovedItems[0]; 
    listBoxItem.PreviewMouseDoubleClick -= ListBoxItem_PreviewMouseDoubleClick; 
} 

private void ListBoxItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    // Selected item was double clicked 
} 

如果你想在MVVM方式,那麼你可以只移動代碼從ListBox_SelectionChanged處理程序的SelectedBook setter和ListBoxItem_PreviewMouseDoubleClick處理程序添加到視圖模型。但是,在視圖模型中處理UI事件並不是一個好主意。最好使用附加屬性來爲你處理它們,但這是另一回事。