微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在系统 Windows 窗体元素更新后触发的事件

如何解决在系统 Windows 窗体元素更新后触发的事件

我有一个带有一系列列表框的 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";

所以基本上我只是更新项目名称,检查标志在以后通过

解决方法

您如何将项目添加到列表中?您是否重新绑定列表框?根据您添加项目的方法,基本上有两种方法可以做到这一点:

  1. 如果您要重新绑定,请在添加项目之前捕获事件。循环遍历列表框的 CheckedItems 属性。保存值。添加您的项目。循环遍历新值并重新检查。

  1. 当用户检查列表框中的项目时,使用 ItemChecked 事件捕获该项目,然后将项目的值存储在某处。 (变量,隐藏的文本框——丑陋,但它有效——等等)如果你只向列表的底部添加项目,你可以存储项目的索引。如果您要重新排序列表,则需要存储一个唯一 ID 以引用该项目。 (注意:如果用户取消选中列表框中的项目,您还需要从存储的值中删除选中的项目。)然后,将项目添加到列表框中后,循环返回并在适当的列表框项目。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。