【问题标题】:Databinding a List of custom objects to ComboBox collection将自定义对象列表数据绑定到 ComboBox 集合
【发布时间】:2010-07-26 14:38:23
【问题描述】:

我正在开发一个项目,该项目通过 USB 控制多个设备并拦截来自 Windows 的 WM_DEVICECHANGE 事件,以管理当前连接的设备和使用这些设备的插件模块。主窗体上有一个组合框(应该)显示所有可用设备(自定义对象),并在设备到达或移除时动态更新。

现在,我阅读的每个教程(包括此处的一些教程)都指示我将组合框的 DataSource 属性设置为我拥有的对象列表,并将 DisplayMember/ValueMember 属性留空以显示 ToString() 并将对象作为值返回。

在某些情况下,我尝试过(例如实例化列表并使用示例/真实对象填充它)组合框会填充,但是在移除或到达时,即使将列表重新分配给组合框,组合框中的集合也不会更新每个设备到达/移除方法之后的组合框的 DataSource 属性。

编辑:哦,对了……这个问题……

如何动态地对(作为值返回的自定义对象)的集合进行数据绑定,以便它可以处理列表内容的突然变化(添加/删除)?

编辑 2:抱歉,我没有说得更清楚,不知道 WPF 的普及程度,但这是一个 WinForms 项目。

提前感谢您提供的任何帮助。 :)

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    即使将列表重新分配给 组合框的 DataSource 属性后 每个设备到达/移除方法。

    重新分配后,需要再次拨打.DataBind()

    如果您使用.net 3.5 或更高版本,您可以使用ObservableCollection 自动更新列表。

    【讨论】:

      【解决方案2】:

      我不确定您使用的是 WinForms 还是 WPF。我假设 WPF 现在没有人应该开始使用 WinForms...


      您需要将 List 更改为 ObservableCollection

      WPF 绑定模型严重依赖精灵和术士的魔法子系统(不是在嘲笑你,我是认真的)。他们有自己的语言来通知对方 DataContext 和 UI 之间发生了一些变化。这些主要是 DependencyObject/Dependency 属性、INotifyPropertyChanged 和 INotifyCollectionChanged,以及 ObservableCollection

      通过正确使用这些图腾,您的 ViewModel/Model(您粘贴在 DataContext 中和/或绑定到 DataSource 的东西)中的更改将反映在 UI 上。

      【讨论】:

      • 不幸的是,我现在正在使用 WinForms,因为我签订的是短期合同(
      【解决方案3】:

      我不知道那个 ToString() 位。我总是将 DisplayMember 设置为我要显示的属性。我不关心 ValueMember,因为 SelectedItem 是我的对象。

      如果这是一个 WinForms 项目,DataBind 不适用,这听起来很像。 (USB 和其他东西)

      当我更新 ComboBox 中的数据时,我不会在我的项目中做任何时髦的事情,我只是再次设置 DataSource。

      编辑: 您也可以尝试使用 BindingList 而不是 List。 http://msdn.microsoft.com/en-us/library/ms132679.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多