gpt4 book ai didi

wpf - 将 MouseBindings 添加到数据绑定(bind) WPF ListView 中的项目

转载 作者:行者123 更新时间:2023-12-04 21:13:16 27 4
gpt4 key购买 nike

当用户单击 ListView 中的项目时,我试图在我的 ViewModel 中执行命令。当我在 XAML 中添加 ListViewItem 时,我可以将 MouseBinding 添加到它的 InputBindings

<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="Test" />
</GridView>
</ListView.View>
<ListViewItem Content="Item 1" >
<ListViewItem.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}" />
</ListViewItem.InputBindings>
</ListViewItem>
</ListView>

但是如何在数据绑定(bind)的 ListView 中实现这一点?

<ListView ItemsSource="{Binding Patients}">
<ListView.View>
<GridView>
<GridViewColumn Header="Test" />
</GridView>
<!-- How to set the MouseBinding for the generated ListViewItems?? -->
</ListView.View>

我已经通过定义 ListViewItem 样式并替换 ListViewItemControlTempalte 获得了解决方案。不过,我希望有更简单的解决方案。

真诚的,迈克尔

最佳答案

使用样式替换 ListViewItem 上的 ControlTemplate 是一个不错的解决方案。事实上,它可能是我的第一选择。

另一种实现相同类型的方法是在 ListViewItem 样式上使用自定义附加属性:

<Style TargetType="ListViewItem">
<Setter Property="local:AddToInputBinding.Binding">
<Setter.Value>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}" />
</Setter.Value>
</Setter>
...

为此,您需要创建 MyBindingHandler.AddBinding 附加属性:

public class AddToInputBinding
{
public static InputBinding GetBinding(... // create using propa snippet
public static void SetBinding(...
public static readonly DependencyProperty BindingProperty = DependencyProperty.RegisterAttached(
"Binding", typeof(InputBinding), typeof(AddToInputBinding), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
((UIElement)obj).InputBindings.Add((InputBinding)e.NewValue);
}
}));
}

这可以扩展以处理多个绑定(bind),但您明白了:此类允许您在任何样式中添加 InputBinding。

此解决方案可能优于您正在执行的操作,因为 DoubleClick 绑定(bind)是直接在 ListBoxItem 上定义的,而不是在其模板内的另一个控件上定义的。但我认为这主要取决于个人喜好。

关于wpf - 将 MouseBindings 添加到数据绑定(bind) WPF ListView 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com