我的列表框中包含来自observablecollection的项目。
<ListBox Name="listBoxData"
DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}"
ItemTemplate="{DynamicResource BookTemplate}"
ItemsSource="{Binding Books, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedBook, Mode=TwoWay}">
问题是如何对所选项目进行双击操作?
我不会避免代码隐藏的方法(目前是空的,我的所有逻辑都在mvvm中)。
答案 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事件并不是一个好主意。最好使用附加属性为你处理它们,但这是另一个故事。