如何解决在系统 Windows 窗体元素更新后触发的事件
后续列表的内容根据之前列表中的选择而变化
所有的框都绑定到一个启用了 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.listofTeamsFromVM.value;
teams_checked_list_Box.displayMember = "name";
所以基本上我只是更新项目名称,检查标志在以后通过
解决方法
您如何将项目添加到列表中?您是否重新绑定列表框?根据您添加项目的方法,基本上有两种方法可以做到这一点:
- 如果您要重新绑定,请在添加项目之前捕获事件。循环遍历列表框的 CheckedItems 属性。保存值。添加您的项目。循环遍历新值并重新检查。
或
- 当用户检查列表框中的项目时,使用 ItemChecked 事件捕获该项目,然后将项目的值存储在某处。 (变量,隐藏的文本框——丑陋,但它有效——等等)如果你只向列表的底部添加项目,你可以存储项目的索引。如果您要重新排序列表,则需要存储一个唯一 ID 以引用该项目。 (注意:如果用户取消选中列表框中的项目,您还需要从存储的值中删除选中的项目。)然后,将项目添加到列表框中后,循环返回并在适当的列表框项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。