【问题标题】:Double click on selected ListBox item双击选定的 ListBox 项
【发布时间】:2014-01-09 20:41:05
【问题描述】:

我有一个包含 observablecollection 项目的列表框。

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

问题是如何在选定的项目上连线双击动作?

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

【问题讨论】:

标签: c# .net wpf


【解决方案1】:

你的最后一行有点令人困惑......对我来说,它说'解决方案背后的代码是好的',但是你提到了 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 设置器和 ListBoxItem_PreviewMouseDoubleClick 处理程序到视图模型。但是,在视图模型中处理 UI 事件并不是一个好主意。最好使用附加属性为您处理它们,但这是另一回事。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多