双击选定的ListBox项

时间:2014-01-09 20:41:06

标签: c# .net wpf

我的列表框中包含来自observablecollection的项目。

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

问题是如何对所选项目进行双击操作?

我不会避免代码隐藏的方法(目前是空的,我的所有逻辑都在mvvm中)。

1 个答案:

答案 0 :(得分: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事件并不是一个好主意。最好使用附加属性为你处理它们,但这是另一个故事。