我有一个CheckedListBox,绑定到BindingList:
private BindingList<string> list = new BindingList<string>();
public MyForm()
{
InitializeComponent();
list.Add("A");
list.Add("B");
list.Add("C");
list.Add("D");
checkedListBox.DataSource = collection;
}
单击某个按钮后,列表将更新:
private void Button_Click(object sender, EventArgs e)
{
list.Insert(0, "Hello!");
}
并且工作正常,CheckedListBox已更新。但是,当某些项目被选中时,单击按钮不仅会更新列表,还会重置所有未选中的项目。我该如何解决?
谢谢!
最佳答案
您需要自己跟踪检查状态。
作为选择,您可以为包含文本和检查状态的项目创建模型类。然后,在控件的ItemCheck
事件中,设置项目模型的检查状态值。同样在ListChenged
的BindingList<T>
事件中,刷新项目的检查状态。
例
创建CheckedListBoxItem
类:
public class CheckedListBoxItem
{
public CheckedListBoxItem(string text)
{
Text = text;
}
public string Text { get; set; }
public CheckState CheckState { get; set; }
public override string ToString()
{
return Text;
}
}
设置
CheckedListBox
像这样:private BindingList<CheckedListBoxItem> list = new BindingList<CheckedListBoxItem>();
private void Form1_Load(object sender, EventArgs e)
{
list.Add(new CheckedListBoxItem("A"));
list.Add(new CheckedListBoxItem("B"));
list.Add(new CheckedListBoxItem("C"));
list.Add(new CheckedListBoxItem("D"));
checkedListBox1.DataSource = list;
checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
list.ListChanged += List_ListChanged;
}
private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
((CheckedListBoxItem)checkedListBox1.Items[e.Index]).CheckState = e.NewValue;
}
private void List_ListChanged(object sender, ListChangedEventArgs e)
{
for (var i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemCheckState(i,
((CheckedListBoxItem)checkedListBox1.Items[i]).CheckState);
}
}
关于c# - 数据源中的更新重置CheckedListBox复选框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57607243/