在ListView中获取鼠标光标下的项目

时间:2015-01-09 10:13:29

标签: c# wpf listview

这可能与thisthis问题重复。但我的问题是如何处理获得的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或隐藏。如何将ListViewItemItem的直观视图)转换为Item(此ListViewItem代表哪个)?

2 个答案:

答案 0 :(得分:1)

当你得到&#34; ListView项目&#34;属性&#34; DataContext&#34;它将返回你的&#34;项目&#34;。

答案 1 :(得分:-1)

在ViewModel中使用它:

public ObservableCollection<Item> Data { ... }

public Item SelectedData { get; set; }

在你的视图中

<ListView ItemsSource="{Binding Data}" SelectedItem="{Binding SelectedData}" ...>

当选择更改时,SelectedData属性也会更改。