我找了很多我的问题的解决方案,但我没有找到任何答案。不久,我想加载我的wpf窗口与选定的项目从复选框列表,我不能达到任何复选框在列表中,使选定的属性为真,所以这里是我的列表我附加到复选框列表。
List<PeriodicSpareParts> sp = new List<PeriodicSpareParts>();
sp.Add(new PeriodicSpareParts { ID=1,SubjectName="Oil Filter" });
sp.Add(new PeriodicSpareParts { ID = 2, SubjectName = "Air Filter" });
sp.Add(new PeriodicSpareParts { ID = 3, SubjectName = "Gas Filter" });
CheckList.ItemsSource = sp;
CheckList.DisplayMemberPath = "SubjectName";
CheckList.ValueMemberPath = "ID";
和我的复选框列表在xaml。
<xctk:CheckListBox Grid.Column="0" Grid.Row="0" Name="CheckList" Background="Transparent" FontFamily="century Gothic" FontSize="15"
BorderThickness="0" Margin="10,10,0,0" ItemSelectionChanged="CheckList_ItemSelectionChanged"/>
所以请帮我找到一个解决方案
如果你想用不同于设置ItemsSource的方法来检查CheckListBox的一些项目,你可以这样做。
修改你的PeriodicSpareParts类:实现INotifyPropertyChanged接口,告诉WPF系统,是之前步骤中创建的属性发生了变化。
public class PeriodicSpareParts : INotifyPropertyChanged {
public int ID { get; set; }
public string SubjectName { get; set; }
private bool isSelected;
public bool IsSelected {
get => this.isSelected;
set {
this.isSelected = value;
this.OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) {
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在加载的事件中,在那里你获得了带有所选项目ID的List,在ItemsSource属性中设置IsSelected=true的项目。
private void OnLoaded(object sender, RoutedEventArgs e) {
var listOfPeriodicSparePartsIDsToCheck = new List<int> {2, 3};
foreach (PeriodicSpareParts item in this.CheckList.ItemsSource) {
if (listOfPeriodicSparePartsIDsToCheck.Any(x => x == item.ID))
item.IsSelected = true;
}
}
在构造函数(或其他方法)中,设置 ItemsSource 属性。
public MainWindow() {
InitializeComponent();
List<PeriodicSpareParts> sp = new List<PeriodicSpareParts>();
sp.Add(new PeriodicSpareParts { ID = 1, SubjectName = "Oil Filter", IsSelected = false });
sp.Add(new PeriodicSpareParts { ID = 2, SubjectName = "Air Filter", IsSelected = false });
sp.Add(new PeriodicSpareParts { ID = 3, SubjectName = "Gas Filter", IsSelected = false });
sp.Add(new PeriodicSpareParts { ID = 4, SubjectName = "Another", IsSelected = false });
CheckList.ItemsSource = sp;
CheckList.DisplayMemberPath = "SubjectName";
CheckList.ValueMemberPath = "ID";
this.Loaded += OnLoaded;
}
在XAML中,将步骤1中创建的新属性映射到SelectedMemberPath属性中。
<xctk:CheckListBox
Name="CheckList"
Grid.Row="0" Grid.Column="0"
Margin="10,10,0,0"
Background="Transparent" BorderThickness="0"
FontFamily="century Gothic" FontSize="15"
ItemSelectionChanged="CheckList_ItemSelectionChanged"
SelectedMemberPath="IsSelected" />
你可以检查这个答案 这个 项目。