0

さまざまなフォームで使用するデータ ナビゲーターとして機能する 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 つまたは複数の行が実際にダーティであることを知りたいです。

ありがとう

4

0 に答える 0