調べてみましたが、探しているものがまったく見つかりません。私はMVVM環境を持っています。View モデルには、データベース接続/クエリからのデータから利用できる Datatable があります。「TheTable.DefaultView」に基づく「DataView」としてプロパティ (getter/setter) を公開しました。
データビューにバインドするウィンドウにデータグリッドがあります...問題ありません。
<DataGrid AutoGenerateColumns="False"
Name="dataMyData"
ItemsSource="{Binding Path=ViewModelViewProperty,
NotifyOnSourceUpdated=True,
NotifyOnTargetUpdated=True}"
SelectedItem="{Binding Path=JustOneRecordInView, Mode=TwoWay}"
SelectionMode="Single"
SelectionUnit="FullRow"
GridLinesVisibility="Horizontal"
CanUserDeleteRows="False"
CanUserAddRows="False" >
上記の "SelectedItem" についても、(getter/setter) を介して ViewModel で公開されているプロパティから取得されます。
さて、私の問題です。データ グリッド内のレコードのリストを下にスクロールすると、グリッド リストだけで提供されるデータよりも多くのデータを表示する他のテキスト ボックス コントロールが表示されます。「現在の行」のデータを編集できるようにしたいので、考えられる限り多くの設定をしたテキストボックスを用意しましたが、まだ何かがおかしいです。
<TextBox
Text="{Binding Path=PropertyForCurrentRecord[SpecificColumnInDataViewRow],
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True,
ValidatesOnExceptions=True,
BindsDirectlyToSource=True,
NotifyOnSourceUpdated=True,
NotifyOnTargetUpdated=True,
NotifyOnValidationError=True}"
Name="textBox1" VerticalAlignment="Top" Width="40" />
スクロールしてデータの編集モードにあり、現在の行に関連付けられているテキストボックスの値を変更し、この値がグリッドに表示されている列の1つである場合、データグリッド自体は変更された値を表示しません. ただし、スクロールを続けて同じレコードに戻ると、テキストボックスの値は変更された値を示します。
したがって、特定の行の個々の列が変更され、グリッド自体も更新されたときに、グリッド データ ソースも更新されたと見なされるように強制するにはどうすればよいでしょうか。ありがとう...