【发布时间】:2015-01-09 10:13:29
【问题描述】:
这可能看起来像 this 或 this 问题的重复项。但我的问题是如何处理获得的ListViewItem?
我已经像这样设置ListView 绑定
<ListView ItemsSource="{Binding Data}" ...>
在哪里
public ObservableCollection<Item> Data { ... }
我如何获得Item(来自ListViewItem)?
我尝试使用 mvvm 并绑定当前鼠标悬停的项目,类似于 this。但后来我绊倒了更多:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<!-- this will not work -->
<Setter Property="{Binding MouseoveredItem, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" Value="{Binding RelativeSource={RelativeSource Self}}"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
我的意图清楚吗? Item如何让鼠标大吼大叫?
我不敢相信没有人这样做过。这是代码隐藏尝试(说明我的问题):
private void ListView_MouseMove(object sender, MouseEventArgs e)
{
var item = VisualTreeHelper.HitTest(listView, Mouse.GetPosition(listView)).VisualHit;
// find ListViewItem (or null)
while (item != null && !(item is ListViewItem))
item = VisualTreeHelper.GetParent(item);
if (item != null)
{
... // item is ListViewItem, how to convert ListViewItem it to Item
}
}
我可以找到ListViewItem,但我需要鼠标悬停的Item 的属性,显示为SubItems 或隐藏。如何将ListViewItem(Item 的可视化视图)转换为Item(这是ListViewItem 代表的)?
【问题讨论】:
-
您在
ListView_MouseMove事件处理程序中尝试过e.OriginalSource吗?? -
@AmolBavannavar,做什么?它有
Microsoft.Windows.Themes.ListBoxChrome类型,我应该如何使用它来获取Item? -
在
e.OriginalSource,你可以在VisualTreeHelper的帮助下向上遍历,你会到达那个项目。 -
@AmolBavannavar,怎么样?我会收到
Item吗?我已经用VisualTreeHelper进行了transversing(参见最后的编辑),但是如您所见,我得到了ListViewItem(并且不是Item)。