我会在 ListView 中的项目上的左双击事件上绑定(bind)一个 ICommand。
我尝试了下面的解决方案但无法正常工作,当我单击 ListView 而不是列表中的项目时会调用 Execute 函数。有人有什么建议吗?
<ListView x:Name="history_list_view" HorizontalAlignment="Left" Height="210" Margin="25,194,0,0"
VerticalAlignment="Top" Width="656" Background="#FF2F2B2B" Foreground="White"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}">
<ListView.InputBindings >
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem}"/>
</ListView.InputBindings>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#7f8c8d"/>
<Setter Property="BorderThickness" Value="0" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#7f8c8d"/>
<Setter Property="BorderThickness" Value="0" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView >
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="Lot" Width="170" DisplayMemberBinding="{Binding Lot}"/>
<GridViewColumn Header="Code" Width="160" DisplayMemberBinding="{Binding Code}"/>
<GridViewColumn Header="Rev" Width="80" DisplayMemberBinding="{Binding Rev}"/>
<GridViewColumn Header="User" Width="140" DisplayMemberBinding="{Binding User}"/>
<GridViewColumn Header="Date" Width="100" DisplayMemberBinding="{Binding Date}"/>
</GridView>
</ListView.View>
</ListView>
最佳答案
添加 EventSetter
对于MouseDoubleClick
ItemContainerStyle
中的事件并从代码隐藏中的事件处理程序调用命令,或使用附加行为来执行命令:
public static class DoubleClickBehavior
{
public static ICommand GetCommand(ListViewItem obj) => (ICommand)obj.GetValue(CommandProperty);
public static void SetCommand(ListViewItem obj, ICommand value) => obj.SetValue(CommandProperty, value);
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(DoubleClickBehavior), new PropertyMetadata(null, OnCommandChanged));
private static void OnCommandChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
lvi.MouseDoubleClick += Lvi_MouseDoubleClick;
}
private static void Lvi_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
ICommand command = GetCommand(lvi);
if (command != null)
command.Execute(null);
}
}
XAML:<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="local:DoubleClickBehavior.Command"
Value="{Binding DataContext.SelectedItemCommand, RelativeSource={RelativeSource AncestorType=ListView}}" />
</Style>
</ListView.ItemContainerStyle>
关于c# - 双击listview WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62700523/