获取ListView中项的双击事件

40

我需要做什么才能参考一个列表视图控件的双击事件?


你可能想要绑定到项目的双击事件? - TheVillageIdiot
16个回答

0

这很烦人,但最好的方法是这样的:

<DataTemplate Name="MyCoolDataTemplate">
    <Grid Loaded="HookLVIClicked" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}">
        <!-- your code here -->
    </Grid>
</DataTemplate>

然后在代码中:

public void HookLVIClicked(object sender, RoutedEventArgs e) {
    var fe = (FrameworkElement)sender;
    var lvi = (ListViewItem)fe.Tag;
    lvi.MouseDoubleClick += MyMouseDoubleClickHandler;
} 

0

我遇到了一个类似的问题,想要通过选定项来打开一个窗口(不同的视图),以便于编辑。

我找到了三种解决方案:1. 代码后台 2. 使用附加行为 3. 使用Blend的i:Interaction和EventToCommand,使用MVVM-Light。

我选择了第三个选项,大致如下:

<ListBox x:Name="You_Need_This_Name"  
ItemsSource="{Binding Your_Collection_Name_Here}"
SelectedItem="{Binding Your_Property_Name_Here, UpdateSourceTrigger=PropertyChanged}"
... rest of your needed stuff here ...
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
    <Command:EventToCommand Command="{Binding Your_Command_Name_Here}" 
        CommandParameter="{Binding ElementName=You_Need_This_Name,Path=SelectedItem}"     />
    </i:EventTrigger>
</i:Interaction.Triggers>

大概就是这样了...当你双击想要的项目时,ViewModel上的方法将被调用,并将SelectedItem作为参数传递,然后你可以在那里做任何你想做的事情 :)


0
发送者的类型是 ListView 而不是 ListViewItem。
    private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ListView triggerView = sender as ListView;
        if (triggerView != null)
        {
            btnEditTrigger_Click(null, null);
        }
    }

0
在 ListBox 的 DoubleClick 事件中,获取 ListBox 的 selecteditem(s) 成员,然后你就可以了。
void ListBox1DoubleClick(object sender, EventArgs e)
    {
        MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString()));
    }

如果我使用ListBox的双击事件,我可以在列表视图的任何位置双击,如果选择了任何项,它都会被选中。但我不需要这样。我只需要在双击时单击的那个项目。 - Sauron
这样做不行,因为你会捕捉到滚动条或其他尴尬位置的双击。 - Ana Betts

0

可以使用MouseDoubleClick事件,而且所有的MouseClick事件都有一个点击计数在eventargs变量'e'中。所以如果e.ClickCount == 2,则表示双击。


-1
我看到这个主题在谷歌上很受欢迎,这是我的简单且有效的示例:)
XAML:
    <ListView Name="MainTCList" HorizontalAlignment="Stretch" MinHeight="440" Height="Auto" Margin="10,10,5.115,4" VerticalAlignment="Stretch" MinWidth="500" Width="Auto" Grid.Column="0" MouseDoubleClick="MainTCList_MouseDoubleClick" IsSynchronizedWithCurrentItem="True">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="UserTID" DisplayMemberBinding="{Binding UserTID}" Width="80"/>
                <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" Width="410" />
            </GridView>
        </ListView.View>
    </ListView>

C#

    private void MainTCList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
            TC item = (TC)MainTCList.Items.CurrentItem;
            Wyswietlacz.Content = item.UserTID;  
    }

Wyswietlacz 是一个测试标签,用于查看项目内容 :) 我在最后一行添加了一个方法,以从项目中加载页面数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接