C# 未通过绑定选中列表框中的复选框
我正试图通过绑定检查所有复选框。。 单击按钮后getChecked属性确实会更改为true,但复选框只是没有被选中。有人知道我做错了什么吗?这是listbox的XAML代码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
<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中显示的任何类中使用它。