После добавления новой строки, почему мои связанные элементы управления не обновляются? - PullRequest
0 голосов
/ 31 августа 2010

Я использую wpf drag and drop для привязки данных к наборам данных. Я генерирую новую строку данных с использованием метода AddNew объекта BindingListCollectionView. Я устанавливаю значения в новой строке и вызываю CommitNew для BindingListCollectionView. Я ожидаю увидеть мои назначенные значения в связанных элементах управления, но все они будут пустыми. Если я сохраню изменения в базе данных, тогда элементы управления будут обновлены, но я хочу, чтобы пользователь увидел мои назначенные значения перед вызовом UpdateAll в TableAdapterManager.

Справочная информация:
Я создал строго типизированный набор данных в проекте, отдельном от моего wpf-приложения. Мое приложение wpf ссылается на приложение набора данных. Я добавил объектный источник данных в приложение wpf, указывающий на типизированный набор данных. Я перетащил поля / элементы управления из окна источников данных в окно дизайнера wpf. Сгенерированный xaml включает раздел Window.Resources с CollectionViewSource, точно привязанным к моему набору данных и доступным для данных. Этот CollectionViewSource является DataContext для элементов управления, которые я перетащил в область дизайна. Все элементы управления используют привязку данных TwoWay.

Когда загружается окно, я хватаю ссылку на CollectionViewSource xaml (используя FindResource). Затем я беру ссылку на свойство view в CollectionViewSource и приводю его к BindingListCollectionView. Теперь я использую метод AddNew объекта BindingListCollectionView для генерации новой строки (которую AddNew возвращает как объект). Я приведу объект к DataRowView и получу доступ к его свойству Row. Затем я приведу строку в строго типизированную строку данных (сгенерированную дизайнером DataSet). Теперь я присваиваю значения некоторым столбцам строк с данными. Я вызываю CommitNew для BindingListCollectionView. Наконец, я вызываю MoveCurrentToFirst для CollectionViewSource.

Проблема:
Используя выражение наблюдения, я вижу, что данные находятся в SourceCollection как CollectionView, так и BindingListCollectionView. Может кто-нибудь объяснить, почему связанные элементы управления не показывают данные, если я не сохраню изменения в базе данных?

Код (сгенерированный 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()

1 Ответ

0 голосов
/ 31 августа 2010

Простое исправление состоит в том, чтобы вызвать метод Refresh BindingListCollectionView после вызова CommitNew.

_blcvScanData.Refresh()

Я наткнулся на этот ответ на свой вопрос через intellisense.Если кто-нибудь может объяснить, почему необходимо обновление, я буду признателен.Я ожидал, что интерфейс INotifyPropertyChange обновит связанные элементы управления, избавив от необходимости вызывать обновление.

...