gpt4 book ai didi

c# - ListBox 复选框命令绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 11:02:41 30 4
gpt4 key购买 nike

我想不通。我以为我正确设置了绑定(bind),但它没有触发。所以我有一个观点:

<ListBox x:Name="EquipmentViewsListBox"
ItemsSource="{Binding EquipmentViews, UpdateSourceTrigger=PropertyChanged}"
SelectionMode="Extended"
BorderThickness="0"
Height="150"
Margin="5,5,10,10">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DataContext.ViewSelected}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

我想在该 ListBox 中的复选框每次触发一个命令被选中。我在我的 View 模型上创建了一个命令,如下所示:
public class SdddViewModel : ViewModelBase
{
public SdddModel Model { get; set; }
public RelayCommand<ViewWrapper> ViewSelected { get; set; }

public SdddViewModel(SdddModel model)
{
Model = model;
ViewSelected = new RelayCommand<ViewWrapper>(OnViewSelected);
}

private void OnViewSelected(ViewWrapper obj)
{
var asd = obj;
}
}

所以我明白,当我做 ListBox.ItemTemplate该项目的上下文变为 ListBoxItem所以在我的例子中是一个类对象 ViewWrapper .与 Name 配合使用效果很好使用 IsSelected 绑定(bind)内容属性(property)。这是检查项目时未触发的命令。我将相对祖先设置为 ListBoxPath=DataContext但仍然没有任何 react 。想法?

最佳答案

问题是 CommandParameter不匹配。你这样声明 CommandParameterViewWrapper但是您发送了 CheckBox 类型的参数通过使用 RelativeSource Self .更改CommandParameter简单地说{Binding}这意味着它发送 DataContextListBoxItem ,即 ViewWrapper .

您可以使用 Snoop 检测到此绑定(bind)错误。 .

关于c# - ListBox 复选框命令绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097243/

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