C# 未通过绑定选中列表框中的复选框

C# 未通过绑定选中列表框中的复选框,c#,wpf,checkbox,binding,listbox,C#,Wpf,Checkbox,Binding,Listbox,我正试图通过绑定检查所有复选框。。 单击按钮后getChecked属性确实会更改为true,但复选框只是没有被选中。有人知道我做错了什么吗?这是listbox的XAML代码 <ListBox Name="scroll" ItemContainerStyle ="{StaticResource _ListBoxItemStyle}" Tag="{Binding SortingIndex}" BorderBrush="#C62828" BorderThickness="1" Grid.Ro

我正试图通过绑定检查所有复选框。。 单击按钮后getChecked属性确实会更改为true,但复选框只是没有被选中。有人知道我做错了什么吗?这是listbox的XAML代码

<ListBox Name="scroll"  ItemContainerStyle ="{StaticResource _ListBoxItemStyle}" Tag="{Binding SortingIndex}"  BorderBrush="#C62828" BorderThickness="1" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Name="checkboxStack">
                        <CheckBox IsChecked="{Binding Path=getChecked}"  Content="{Binding Path=vraag}"  Style="{StaticResource LifesaversCheckBoxesA}"/>
                        <StackPanel Margin="20,0,0,0">
                            <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[0]}" FontSize="15" />
                            <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[1]}" FontSize="15" />
                            <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=Tag}" Content="{Binding Path=antwoorden[2]}" FontSize="15" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

这是我制作的按钮的事件处理程序,用于将vragenLijst中每个vraag的getChecked布尔值更改为true。示例数据只是生成一些随机字符串

public partial class LivesaversWindow : UserControl
{
    ObservableCollection<Vraag> vragenLijst;
    public LivesaversWindow()
    {
        InitializeComponent();
        vragenLijst = new VragenList(SampleData.vragen());

        scroll.ItemsSource = vragenLijst;

    }

    private void alles_Selecteren(object sender, RoutedEventArgs e)
    {
        if ((string)select.Content == "Alles selecteren")
        {
            foreach(Vraag vraag in vragenLijst)
            {
                vraag.getChecked = true;

            }
            select.Content = "Alles deselecteren";
        }
        else
        {
            foreach (Vraag vraag in vragenLijst)
            {
                    vraag.getChecked = false;
            }
            select.Content = "Alles selecteren";
        }
    }
公共部分类LiveSaverWindow:UserControl
{
可观察的收集vragenLijst;
公共LiveSaverWindow()
{
初始化组件();
vragenLijst=新的VragenList(SampleData.vragen());
scroll.ItemsSource=vragenLijst;
}
私有无效所有(对象发送方、路由目标方)
{
如果((字符串)select.Content==“Alles selecteren”)
{
foreach(vragenLijst中的Vraag Vraag)
{
vraag.getChecked=true;
}
select.Content=“Alles deseleren”;
}
其他的
{
foreach(vragenLijst中的Vraag Vraag)
{
vraag.getChecked=false;
}
select.Content=“Alles selecteren”;
}
}
这是我正在使用的两个类

    public class Vraag 
{
    public List<string> antwoorden { get; set; }
    public string vraag { get; set; }
    public Boolean getChecked { get; set; }
}





 public class VragenList : ObservableCollection<Vraag>
{
    public VragenList(List<Vraag> vragen) :base()
    {
        foreach (var vraag in vragen)
        {
            Add(vraag);
        }
    }
}
公共类Vraag
{
公共列表antwoorden{get;set;}
公共字符串vraag{get;set;}
公共布尔getChecked{get;set;}
}
公共类VragenList:ObservableCollection
{
公共VragenList(列表vragen):base()
{
foreach(vragen中的var vraag)
{
添加(vraag);
}
}
}

您的类Vraag必须实现INotifyPropertyChanged接口

您的类Vraag必须实现INotifyPropertyChanged接口

您的类Vraag没有实现INotifyPropertyChanged接口。因此,UI没有注册对您的对象所做的任何更改他认为:

因此,您需要做的基本工作是实现INotifyPropertyChanged接口,如下所示:

public class Vraag : INotifyPropertyChanged
{
    public List<string> antwoorden { get; set; }
    public string vraag { get; set; }

    private bool isChecked;

    public bool getChecked
    {
        get { return isChecked; }
        set
        {
            isChecked = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged([CallerMemberName] string propName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
    }
}
公共类Vraag:INotifyPropertyChanged
{
公共列表antwoorden{get;set;}
公共字符串vraag{get;set;}
私人住宅被检查;
公共场所检查
{
获取{return isChecked;}
设置
{
isChecked=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
public void OnPropertyChanged([CallerMemberName]string propName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propName));
}
}

希望这有帮助!

您的类Vraag没有实现INotifyPropertyChanged接口。因此,UI没有注册对视图中显示的对象所做的任何更改:

因此,您需要做的基本工作是实现INotifyPropertyChanged接口,如下所示:

public class Vraag : INotifyPropertyChanged
{
    public List<string> antwoorden { get; set; }
    public string vraag { get; set; }

    private bool isChecked;

    public bool getChecked
    {
        get { return isChecked; }
        set
        {
            isChecked = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged([CallerMemberName] string propName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
    }
}
公共类Vraag:INotifyPropertyChanged
{
公共列表antwoorden{get;set;}
公共字符串vraag{get;set;}
私人住宅被检查;
公共场所检查
{
获取{return isChecked;}
设置
{
isChecked=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
public void OnPropertyChanged([CallerMemberName]string propName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propName));
}
}

希望这有帮助!

没问题。就像侧节点一样:创建一个基类,用PropertyChangedEventHandler和OnPropertyChanged方法实现INotifyPropertyChanged接口,这样你就可以在你想要在UI中显示的任何类中使用它。没问题。就像侧节点一样:这样很好使用PropertyChangedEventHandler和OnPropertyChanged方法创建一个实现INotifyPropertyChanged接口的基类,这样您就可以在想要在UI中显示的任何类中使用它。