如何在wpf窗口加载中选中xceedsoftware.checkboxlist控件中的一些项目。

问题描述 投票:0回答:1

我找了很多我的问题的解决方案,但我没有找到任何答案。不久,我想加载我的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"/> 

所以请帮我找到一个解决方案

wpf
1个回答
0
投票

如果你想用不同于设置ItemsSource的方法来检查CheckListBox的一些项目,你可以这样做。

  1. 修改你的PeriodicSpareParts类:添加一个属性,映射CheckListBox的SelectedMemberPath。这个新属性可以按照你的要求命名,在我的例子中,我命名为IsSelected。
  2. 修改你的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));
        }
    }
    
  3. 在加载的事件中,在那里你获得了带有所选项目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;
        }
    }
    
  4. 在构造函数(或其他方法)中,设置 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;
    }
    
  5. 在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" />
    

你可以检查这个答案 这个 项目。

© www.soinside.com 2019 - 2024. All rights reserved.