ListView InputBinding MouseBinding不起作用

时间:2015-02-06 09:37:08

标签: c# wpf xaml

为什么ListView.InputBindings无效?

我以同样的方式实现了Interaction.Triggers,它运行得很好。

<ListView Name="listView1" ItemsSource="{Binding Cars}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseClick">
            <i:InvokeCommandAction Command="{Binding ItemSelectCommand}" CommandParameter="{Binding ElementName=listView1,Path=SelectedItem}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <ListView.InputBindings>
        <MouseBinding Gesture="LeftClick" Command="{Binding ItemSelectCommand}" CommandParameter="{Binding ElementName=listView1,Path=SelectedItem}"/>
    </ListView.InputBindings>
</ListView>

如果没有(System.Windows.Interactivity Interaction.Triggers

,它真的不想再使用它吗?

1 个答案:

答案 0 :(得分:3)

正如@ Grx70在对此答案的评论中提到的那样,父LeftClick中定义的ListView鼠标手势不适用于ListViewItem因为该项目处理此手势为了获得焦点,所以它没有泡出那个姿势。

您可以将InputBinding处理转移到ListViewItem本身:

<ListView Name="listView1" ItemsSource="{Binding A}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding}">
                <ContentPresenter.InputBindings>
                    <MouseBinding Gesture="LeftClick" Command="{Binding DataContext.ItemSelectCommand, ElementName=listView1}" CommandParameter="{Binding ElementName=listView1,Path=SelectedItem}"/>
                </ContentPresenter.InputBindings>
            </ContentPresenter>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

你还可以阅读更多关于InputBindingthis qestion中如何运作的内容,有一个答案可以解释这一点。答案建议也要创造一种附加行为。