#c# #wpf #listview
#c# #wpf #listview
Вопрос:
У меня есть представление списка с некоторыми элементами и стилем, который указывает, что при щелчке по элементу свойство IsSelected изменится. Смотрите отрывок кода ниже.
В настоящее время это выделяет / выделяет элемент и выполняет действие, связанное с этим элементом, при нажатии на него в списке. Теперь я хочу изменить поведение так, чтобы это происходило при двойном щелчке вместо одного щелчка. Кроме того, при одиночном щелчке по элементу этот элемент также должен быть выбран / выделен, но действие, связанное с этим элементом, не выполняется, так что пользователь может выбрать несколько элементов, щелкнув по ним одним щелчком мыши (аналогично тому, как вы обычно выполняете ctrl-click), а затем выполнить все действия одновременно.один раз, когда выбраны нужные элементы и нажата какая-то кнопка.
Я должен также упомянуть, что я использую шаблон MVVM, поэтому в файле с кодом нет кода. Любой код будет помещен в файл ItemListViewModel.cs.
Я подозреваю, что мне пришлось бы Command
каким-то образом использовать? Я также нашел атрибут для вызова ListView MouseDoubleClick=""
, однако это не заменит функциональность одного клика, а только дополнит ее.
У кого-нибудь есть идея, как заставить это работать?
<ListView Grid.Row="0" x:Name="ItemsList"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemsSource="{Binding FilteredItems}"
SelectionMode="Extended">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="IsSelected" Value="{Binding Selected, Mode=TwoWay}"/>
</Style>
</ListView.Resources>
</ListView>
Ответ №1:
Для описания поведения выбора взгляните на SelectionMode . Вы можете установить ListView.SelectionMode
значение Multiple
, которое похоже на поведение, которое вы описываете.
Для двойного щелчка вы можете использовать MouseDoubleClick
событие или попробовать использовать привязку мыши, которая позволяет использовать ICommand
s вместо событий (на странице InputBinding есть несколько хороших примеров).
Однако вам придется протестировать, чтобы увидеть, как все работает вместе. Обработка как одиночного, так и двойного щелчка может быть сложной, и вам может потребоваться обработать PreviewMouseDown
событие и сделать все вручную (наихудший сценарий).
Комментарии:
1. Спасибо. На данный момент я поставил двойной щелчок на паузу. Однако я пытаюсь изменить поведение щелчка shift и щелчка ctrl. На данный момент при одиночном щелчке по элементу этот элемент отображается в окне. Это желательно. Затем я хочу выбрать несколько элементов, щелкнув shift или ctrl, а затем показать их все сразу при нажатии другой кнопки. Тем не менее, элемент мгновенно отображается в окне, когда я также нажимаю ctrl, потому что приложение регистрирует обычный щелчок левой кнопкой мыши в дополнение к щелчку ctrl. Как я могу удалить поведение с одним щелчком мыши из ctrl-click?