将组合框数据绑定为null属性

时间:2015-01-06 15:33:01

标签: winforms data-binding combobox null

我正在开发针对.NET 4.0或4.5的Windows窗体应用程序。该应用程序使用多个自定义业务对象,频繁的模式是更复杂的对象具有更简单的对象作为属性。例如,Location对象是二维坐标。但是Road有两个属性,Start和End,类型为Location。车辆具有属于商品类型的FuelUsed属性。等等。

在用户界面中,用户必须编辑这些类型的实例(例如Road,Vehicle)。在我的表单上,我通常定义与正在编辑的主类型相对应的绑定源,以及属性引用的类型。这些数据源通常为KeyedCollection类型。例如,以下代码在我的表单构造函数中。

Friend WithEvents Me.bs_roads as System.Windows.Forms.BindingSource
Friend WithEvents Me.bs_locations as System.Windows.Forms.BindingSource

Me.bs_roads.DataMember = "Roads"
Me.bs_roads.DataSource = DataManager.Roads 

Me.bs_locations.DataMember = "Locations"
Me.bs_locations.DataSource = DataManager.Locations

Me.comboStart.DataSource = Me.bs_locations
Dim b As New Binding("SelectedItem", Me.bs_roads, "Start", True, DataSourceUpdateMode.OnPropertyChanged)
Me.comboStart.DataBindings.Add(b)

只要Road.Start属性不是Nothing,这就可以正常工作。例如,新构建的Road具有null Start属性。但comboStart会在bs_locations列表中显示第一个项。如果用户未与组合框交互,则不会设置该属性,从而导致混淆和沮丧。另一个问题是用户不能轻易地将属性设置为空值。我可以提供一个按钮来取消属性,但同样,组合框无法跟上属性。

我的问题:如何创建能够正确反映空值的数据绑定组合框,这些框很容易实现和维护(即最少的自定义代码)。

我看过可能有十几个问题。我最关心的是this one,它没有答案。还有another one使用SQL视图在组合框数据源中添加null。我没有成功复制它,因为我的业务对象是KeyedCollections。

0 个答案:

没有答案