gpt4 book ai didi

c# - 无法使用 DataTemplate WPF 将 InputBinding 应用于整个 ListBoxItem

转载 作者:行者123 更新时间:2023-12-03 10:19:24 25 4
gpt4 key购买 nike

试图在 WPF 的 ListBox 中对我的 ListBoxItems 进行一些键绑定(bind)。我正在使用 MVVM,并将 ListBox 的 ItemSource 绑定(bind)到 ViewModel 列表。此 ViewModel 有一个字符串和一个 bool 值,用于表示“已选择”。我希望将 Selected 显示为 CheckBox 的属性。

我正在尝试这样做,以便如果我使用键盘上的向上和向下箭头导航列表项,然后按 enter/space/whatever,我可以切换复选框。但是,我必须先按 Tab,才能将焦点放在包含复选框的 StackPanel 上。

<DataTemplate x:Key="MyTemplate" DataType="{x:Type ViewModel}">            
<Border Width="2" BorderBrush="Blue">

<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding EnterCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>

<CheckBox VerticalAlignment="Center"
Content="{Binding Name}"
IsChecked="{Binding Selected}"
Margin="3" />

</Border>
</DataTemplate>

========================
<Popup x:Name="FilterPopup" Grid.Column="1" 
IsOpen="{Binding IsChecked, ElementName=FilterButton}"
StaysOpen="False"
PlacementTarget="{Binding ElementName=FilterButton}"
Placement="Top">

<ListBox ItemsSource="{Binding ViewModels}"
ItemTemplate="{StaticResource MyTemplate}" />

</Popup>

我错过了什么明显的东西吗???

最佳答案

上面的触发器在数据模板内触发,而不是在项目容器内。因此,如果最后一个集中,则没有效果。

为避免这种情况,应在项目容器级别指定触发器:

<ListBox.ItemContainerStyle>
<Style>
<Setter Property="l:Attach.InputBindings">
<Setter.Value>
<InputBindingCollection>
<KeyBinding Command="{Binding EnterCommand}" Key="Enter" />
<KeyBinding Command="{Binding EnterCommand}" Key="Space" />
</InputBindingCollection>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>

我采用了一种方法来设置来自 this question 的样式的输入绑定(bind).

关于c# - 无法使用 DataTemplate WPF 将 InputBinding 应用于整个 ListBoxItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849872/

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