我试图在用户单击 ListView 中的项目时执行 ViewModel 中的命令。当我添加一个ListViewItem
在 XAML 中我可以添加一个MouseBinding
to its 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>
但是如何在数据绑定 ListView 中实现这一点呢?
<ListView ItemsSource="{Binding Patients}">
<ListView.View>
<GridView>
<GridViewColumn Header="Test" />
</GridView>
<!-- How to set the MouseBinding for the generated ListViewItems?? -->
</ListView.View>
我已经通过定义得到了一个解决方案ListViewItem
样式并替换ControlTempalte
of the ListViewItem
。不过,我希望有一个更简单的解决方案。
真挚地,
迈克尔
更换ControlTemplate
on ListViewItem
使用样式并不是一个坏的解决方案。事实上,这可能是我的第一选择。
完成相同类型的另一种方法是在您的ListViewItem
style:
<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);
}
}));
}
可以扩展该类以处理多个绑定,但您会明白:此类允许您在任何样式中添加 InputBinding。
此解决方案可能比您正在执行的操作更好,因为 DoubleClick 绑定是直接在 ListBoxItem 上定义的,而不是在其模板内的另一个控件上定义的。但我认为这主要取决于个人喜好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)