【问题标题】:After adding a new row why aren't my bound controls updating?添加新行后,为什么我的绑定控件没有更新?
【发布时间】:2010-08-31 17:33:45
【问题描述】:

我正在使用 wpf 拖放数据绑定到数据集。我使用 BindingListCollectionView 的 AddNew 方法生成了一个新的数据表行。我在新行上设置值并在 BindingListCollectionView 上调用 CommitNew。 我希望在绑定的控件中看到我分配的值,但它们都是空白的。如果我将更改保存到数据库,然后控件会更新,但我希望用户在调用之前看到我分配的值在 TableAdapterManager 上更新所有。

背景:
我在与我的 wpf 应用程序分开的项目中创建了一个强类型数据集。我的 wpf 应用程序引用了数据集应用程序。我在 wpf 应用程序中添加了一个指向类型化数据集的对象数据源。我将字段/控件从数据源窗口拖到 wpf 设计器窗口。生成的 xaml 包含一个 Window.Resources 部分,其中 CollectionViewSource 准确绑定到我的数据集和数据表。这个 CollectionViewSource 是我拖到设计图面的控件的 DataContext。所有控件都使用双向数据绑定。

当窗口加载时,我获取对 xaml 的 CollectionViewSource 的引用(使用 FindResource)。然后我获取对 CollectionViewSource 的 view 属性的引用并将其转换为 BindingListCollectionView。现在我使用 BindingListCollectionView 的 AddNew 方法生成一个新行(AddNew 作为对象返回)。我将对象转换为 DataRowView 并访问它的 Row 属性。然后我将该行转换为强类型数据表行(由 DataSet 设计器生成)。现在我将值分配给一些数据表行列。我在 BindingListCollectionView 上调用 CommitNew。最后我在 CollectionViewSource 上调用 MoveCurrentToFirst。

问题:
使用监视表达式,我可以看到数据位于 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()

【问题讨论】:

    标签: wpf drag-and-drop dataset binding collectionviewsource


    【解决方案1】:

    简单的解决方法是在调用 CommitNew 之后调用 BindingListCollectionView 的 Refresh 方法

    _blcvScanData.Refresh()
    

    我通过智能感知偶然发现了我自己的问题的答案。如果有人可以解释为什么需要刷新,我将不胜感激。我希望 INotifyPropertyChange 接口能够更新绑定控件,从而避免调用刷新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多