我正在使用WPF将数据绑定拖放到数据集。我使用bindingListCollectionView的addNew方法生成一个新的数据表行。我在新行上设置值,并在bindingListCollectionView上调用commitnew。
我希望在绑定控件中看到我分配的值,但它们都是空白的。
如果我将更改保存到数据库中,则控件将被更新,但我希望用户在对TableAdapterManager调用UpdateAll之前看到我分配的值。
背景:
我在一个独立于WPF应用程序的项目中创建了一个强类型数据集。我的WPF应用程序引用了数据集应用程序。我在WPF应用程序中添加了一个指向类型化数据集的对象数据源。我将字段/控件从数据源窗口拖到了WPF设计器窗口。生成的XAML包含一个window.resources部分,其中CollectionViewSource精确绑定到我的数据集和数据表。此CollectionViewSource是我拖动到设计图面的控件的DataContext。所有控件都使用twoway数据绑定。
加载窗口时,我获取对XAML的CollectionViewSource的引用(使用FindResource)。然后,我获取对CollectionViewSource的View属性的引用,并将其强制转换为bindingListCollectionView。现在,我使用bindingListCollectionView的addNew方法生成一个新行(addNew作为对象返回)。我将对象强制转换为DataRowView并访问它的Row属性。然后,我将该行强制转换为强类型数据表行(由数据集设计器生成)。现在我将值赋给一些数据表行列。我在bindingListCollectionView上调用commitnew。最后,我在CollectionViewSource上调用MoveCurrentToFirst。
问题:
使用watch表达式,我可以看到数据在collectionview和bindingListCollectionView的sourceCollection中。
有人能解释为什么绑定控件不显示数据,除非我将更改保存到数据库?
代码(未显示生成的XAML):
Private WithEvents _cvsScanData As System.Windows.Data.CollectionViewSource
Private WithEvents _blcvScanData As System.Windows.Data.BindingListCollectionView
_cvsScanData = CType(Me.FindResource("Dt_tblScanDataViewSource"), System.Windows.Data.CollectionViewSource)
_blcvScanData = CType(_cvsScanData.View, BindingListCollectionView)
Dim newRow As LabDataSet.dt_tblScanDataRow = CType(CType(_blcvScanData.AddNew, System.Data.DataRowView).Row, LabDataSet.dt_tblScanDataRow)
newRow.SampleID = "testSampleID"
newRow.MachineID = "testMachineID"
_blcvScanData.CommitNew()
_cvsScanData.View.MoveCurrentToFirst()