さまざまなフォームで使用するデータ ナビゲーターとして機能する wpf ユーザー コントロールを構築しています。グリッドなどのフォーム上の他のコントロールと同様に、ビュー モデルから基になる ICollectionView をデータ ソースとして使用します。グリッド上のビューは次のように設定されています。
Public Shared ReadOnly DataIcvProperty As DependencyProperty = DependencyProperty.Register("DataIcv", GetType(ICollectionView), GetType(DataNavigator), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf OnDataIcvChanged)))
<Description("The CollectionView (as an ICollectionView) to be passed to the DataNavigator control"), Category("Vtl DataNavigator Main Properties")>
Public Property DataIcv As ICollectionView
Get
Return CType(GetValue(DataIcvProperty), ICollectionView)
End Get
Set(ByVal Value As ICollectionView)
SetValue(DataIcvProperty, Value)
End Set
End Property
Private Shared Sub OnDataIcvChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim dn As DataNavigator = CType(d, DataNavigator)
dn.RecordsCount = dn.GetRecordCount
dn.Records.Text = dn.RecordsCount.ToString
dn.UpdateUi()
If e.OldValue IsNot Nothing Then
RemoveHandler dn.DataIcv.CollectionChanged, AddressOf dn.OnDataIcvCollectionChanged
RemoveHandler dn.DataIcv.CurrentChanged, AddressOf dn.OnDataICVCurrentChanged
RemoveHandler dn.DataIcv.CurrentChanging, AddressOf dn.OnDataIcvCurrentChanging
End If
If e.NewValue IsNot Nothing Then
AddHandler dn.DataIcv.CollectionChanged, AddressOf dn.OnDataIcvCollectionChanged
AddHandler dn.DataIcv.CurrentChanged, AddressOf dn.OnDataICVCurrentChanged
AddHandler dn.DataIcv.CurrentChanging, AddressOf dn.OnDataIcvCurrentChanging
End If
End Sub
Private Sub OnDataICVCurrentChanged(ByVal sender As Object, ByVal e As EventArgs)
Record.Text = (DataIcv.CurrentPosition + 1).ToString
UpdateUi()
End Sub
Private Sub OnDataIcvCurrentChanging(ByVal sender As Object, ByVal e As EventArgs)
'MessageBox.Show("I've Changed")
End Sub
Private Sub OnDataIcvCollectionChanged(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("I've Changed")
End Sub
典型的なフォームは次のようになります。
今私ができるようにしたいのは、基になるビュー コレクションがいつダーティであるかを判断して、その情報を使用して、ナビゲーター コントロールの保存ボタンなどを無効にすることができるようにすることです。CurrentChanging と CollectionChanged の両方を試しました。私が考えていた前者は、2つの中でより有望であり、グリッドで新しい行を選択または作成すると起動しますが、セルの内容を変更しても起動しません。保存ボタンを有効にする前に、1 つまたは複数の行が実際にダーティであることを知りたいです。
ありがとう