当 ListView 有 ItemTemplate 时如何处理 ListViewItem 的右键单击?
Posted
技术标签:
【中文标题】当 ListView 有 ItemTemplate 时如何处理 ListViewItem 的右键单击?【英文标题】:How to handle a right click on a ListViewItem when ListView has an ItemTemplate? 【发布时间】:2016-12-22 22:51:02 【问题描述】:我有一个绑定到 ViewModel 的 ListView。 我想选择右键单击的 ListViewItem 以及触发更改 ViewModel 属性的触发器。(选择模式为单一)。
<ListView MinHeight="50" MaxHeight="120"
ItemsSource="Binding Path=DisplayItems" SelectedItem="Binding Path=SelectedDisplayItem, Mode=TwoWay"
ItemTemplate="StaticResource SelectedDisplayItemTemplate"
IsItemClickEnabled="False"
helpers:AttachedCommand.Command="Binding Path=Commands[NavigateToDisplayItem]"
helpers:AttachedCommand.Event="Tapped" />
我已尝试处理 ListView 中的 Right Tapped 事件,但无法获取被点击的项目。如何在右键单击时更改所选项目,并在选中时将 SelectedDisplayItem 设置为右键单击项目?
【问题讨论】:
既然您将ItemTemplate
设置为SelectedDisplayItemTemplate
,当您在那里设置RightTapped
事件时会发生什么?
好吧,因为它是一个模板并从样式文件中获取其内容,所以我不想在那里放置 RightTapped。
也许您可以将您的 itemtemplate 设为用户控件并在其中处理 RightTapped。
【参考方案1】:
尝试使用行为来实现
<ListView
x:Name MainListView
MinHeight="50"
MaxHeight="120"
ItemsSource="Binding DisplayItems"
SelectedItem="Binding SelectedDisplayItem, Mode=TwoWay"
ItemTemplate="StaticResource SelectedDisplayItemTemplate">
<i:Interaction.Behaviors>
<core:EventTriggerBehavior
EventName="RightTapped">
<core:InvokeCommandAction
Command="Binding YourCommand"
CommandParameter="Binding ElementName=MainListView, Path=SelectedItem"/>
</core:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
【讨论】:
以上是关于当 ListView 有 ItemTemplate 时如何处理 ListViewItem 的右键单击?的主要内容,如果未能解决你的问题,请参考以下文章
NativeScript 中的 ListView.itemTemplate 和图像
ItemTemplateSelector 和 ListView.ItemTemplate 的区别
WPF绑定到Listview的Itemtemplate的可见性不起作用[重复]