将CheckListBox绑定到ViewModel

本文关键字:ViewModel 绑定 CheckListBox | 更新日期: 2023-09-27 18:18:35

我正在使用WPF工具包中的CheckListBox,并试图将其绑定到我的ViewModel。除了从控件中获得所选值外,我还希望能够通过单击按钮清除任何选择来重置它。我被困在如何绑定集合中每个项目的选中或选中状态,但如果我的整个方法都失败了,我也希望能得到一些指导。

我已经创建了一个简单的类,它带有一个字符串描述符和一个布尔属性,我打算用它来指示每个复选框的状态…

public class DrugInfluence : INotifyPropertyChanged
{
    public string Impairment { get; set; }
    private bool isChecked;
    public bool IsChecked
    {
        get { return isChecked; }
        set
        {
            if(isChecked != value)
            {
                isChecked = value;
                OnPropertyChanged("IsChecked");
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

ViewModel中一个名为"损伤列表"的DrugInfluence对象集合,我想将其绑定到CheckListBox控件本身…

    public List<DrugInfluence> ImpairmentList
    {
        get
        {
            return impairmentList;
        }
        set
        {
            if(impairmentList != value)
            {
                impairmentList = value;
                NotifyPropertyChanged("ImpairmentList");
            }
        }            
    }

以及我用来将ViewModel绑定到CheckListBox控件的XAML…

        <sdk:CheckListBox Margin="6"
                          ItemsSource="{Binding ImpairmentList}"   
                          DisplayMemberPath="Impairment"
                          SelectedMemberPath="IsChecked"
                          SelectedItemsOverride="{Binding SelectedImpairments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        </sdk:CheckListBox>

将CheckListBox绑定到ViewModel

这是您正在使用的控件吗?如果是这样,看起来SelectedMemberPath就是您想要绑定的属性。如果你想以编程的方式检查/取消检查,你还需要在IsChecked属性改变时引发一个事件。例如,

 public class DrugInfluence : INotifyPropertyChanged
    {
        public string Impairment { get; set; }
        private bool _isChecked;
        public bool IsChecked 
        { 
            get{ return _isChecked;}
            set
            {
                if (_isChecked!= value)
                {
                    _isChecked= value;
                    OnPropertyChanged("IsChecked");
                }
            }; 
        }
    }

然后实现INotifyPropertyChanged成员的其余部分