问题描述
后续列表的内容根据之前列表中的选择而变化
所有的框都绑定到一个启用了 OnListChanged 的 BindingList
但是,我注意到如果我将一个项目添加到列表中,它似乎只有在所有其他事件都被触发后才会更新 UI
我查看了我希望在 CheckedListBox 和相关的 viewmodel 上触发的事件,以便捕获将项目添加到列表中的事件,但到目前为止没有成功
有人可以告诉我哪个事件可以让我在 UI 更新后调用我的“CheckBoxes”方法,否则它们都会再次设置为空白,直到表单关闭并打开
private void OnPropertyChanged(object sender,System.ComponentModel.PropertyChangedEventArgs e)
{
// I've removed the debug statements,but this event when the bound list updates is fired before the UI updates
}
private void teams_checked_list_Box_SelectedindexChanged(object sender,EventArgs e)
{
// same with this event,and the other events like SizeChanged
}
编辑:经过反思,我意识到问题的发生是因为我没有在绑定中设置真/假检查标志,因为我不知道该怎么做。如果有人能指出我正确的方向?代码目前看起来像这样:
teams_checked_list_Box.DataSource = Globals.ThisAddIn.TFSTeamsviewmodel.@R_404[email protected];
teams_checked_list_Box.displayMember = "name";
所以基本上我只是更新项目名称,检查标志在以后通过
解决方法
您如何将项目添加到列表中?您是否重新绑定列表框?根据您添加项目的方法,基本上有两种方法可以做到这一点:
- 如果您要重新绑定,请在添加项目之前捕获事件。循环遍历列表框的 CheckedItems 属性。保存值。添加您的项目。循环遍历新值并重新检查。
或
- 当用户检查列表框中的项目时,使用 ItemChecked 事件捕获该项目,然后将项目的值存储在某处。 (变量,隐藏的文本框——丑陋,但它有效——等等)如果你只向列表的底部添加项目,你可以存储项目的索引。如果您要重新排序列表,则需要存储一个唯一 ID 以引用该项目。 (注意:如果用户取消选中列表框中的项目,您还需要从存储的值中删除选中的项目。)然后,将项目添加到列表框中后,循环返回并在适当的列表框项目。