“绑定永不更新列表框”,其中包含在选择列表项时切换的复选框

本文关键字:列表 选择 复选框 包含 绑定 更新 | 更新日期: 2023-09-27 18:35:39

所以我一直在尝试制作一个列表项,该列表项将在触发列表框时切换复选框。当不涉及绑定时,我已经能够成功地做到这一点,但是一旦我添加绑定,它永远不会更新绑定,但仍然更新复选框上的已选中。我希望它选中该框并更新我的 IsSelectedName 绑定,以便我知道用户选中了它。此外,如果我右键单击复选框是所选名称将得到更新。这是我的代码的最简单版本:

        <ListBox Grid.Column="1" Margin="20" ItemsSource="{Binding listitems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox Name="CheckboxIsSelected" IsChecked="{Binding IsSelectedName, UpdateSourceTrigger=PropertyChanged}" />
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}" Value="True">
                    <Setter TargetName="CheckboxIsSelected" Property="IsChecked" Value="True"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

提前致谢

下面是视图模型:

public class ListTestVM
{
    public List<listem> listitems { get; set; }
    public ListTestVM()
    {
        listitems = new List<listem>()
        {
            new listem(){ Name = "Test", IsSelectedName = false },
            new listem(){ Name = "Test1", IsSelectedName = true },
            new listem(){ Name = "Test2", IsSelectedName = false },
            new listem(){ Name = "Test3", IsSelectedName = true }
        };
    }
}

下面是列表项类:

public class listem :INotifyPropertyChanged
{
    private bool _IsSelectedName;
    public bool IsSelectedName
    {
        get { return _IsSelectedName; }
        set
        {
            _IsSelectedName = value;
            NotifyPropertyChanged("IsSelectedName");
        }
    }
    public string Name { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

“绑定永不更新列表框”,其中包含在选择列表项时切换的复选框

对于列表项属性,请使用可观察集合类型,如下所示:

public ObservableCollection<listem> listitems { get; set; }

并在列表框数据模板中将绑定模式设置为双向模式,如下所示:

<CheckBox Name="CheckboxIsSelected" IsChecked="{Binding IsSelectedName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

并移除触发器

您是否在基类上使用 INotifyPropertyChanged 接口?属性更改的触发是有效的吗?我认为这将是你问题的关键。