データセットへのwpfドラッグアンドドロップデータバインディングを使用しています。BindingListCollectionView の AddNew メソッドを使用して、新しいデータ テーブル行を生成します。新しい行に値を設定し、BindingListCollectionView で CommitNew を呼び出します。バインドされたコントロールに割り当てられた値が表示されることを期待していますが、それらはすべて空白です。変更をデータベースに保存すると、コントロールが更新されますが、TableAdapterManager で UpdateAll を呼び出す前に、ユーザーが割り当てられた値を確認できるようにします。
背景:
wpf アプリケーションとは別のプロジェクトで、厳密に型指定されたデータセットを作成しました。私の wpf アプリはデータセット アプリケーションを参照します。型指定されたデータセットを指すオブジェクト データソースを wpf アプリに追加しました。フィールド/コントロールをデータソース ウィンドウから wpf デザイナー ウィンドウにドラッグしました。生成された xaml には、CollectionViewSource がデータセットとデータテーブルに正確にバインドされた Window.Resources セクションが含まれています。この CollectionViewSource は、デザイン サーフェイスにドラッグしたコントロールの DataContext です。すべてのコントロールは、TwoWay データバインディングを使用します。
ウィンドウが読み込まれると、(FindResource を使用して) xaml の CollectionViewSource への参照を取得します。次に、CollectionViewSource のビュー プロパティへの参照を取得し、それを 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()