منع تغيير الخاصية في ربط البيانات وقوة تحكم منضم لإظهار القيمة الحالية

StackOverflow https://stackoverflow.com/questions/518211

سؤال

ولدي

    Public Overrides Property UID() As String
        Get
            Return mUID
        End Get
        Set(ByVal value As String)
            If Me.IsNew Then
                mUID = value
            End If
            OnPropertyChanged("UID")
        End Set
    End Property

والطبقة تنفذ INotifyPropertyChanged وأنا ملزم لعنصر تحكم مربع نص في الضوابط WinForm.

والمشكلة هي عندما يكتب المستخدم قيمة في مربع النص الذي يظهر قيمة جديدة في مربع النص على الرغم من أن قيمة الربط لا يزال هو نفسه القيام به لحقيقة IsNew خاطئة. (لقد حاولت استخدام كلا النوعين DataSourceUpdateMode).

ولقد قرأت INotifyPropertyChanged مشكلة و أعتقد أشكال النوافذ تعمل أساسا بنفس الطريقة في أن المبادر لهذا الحدث لن أيضا كشف تعامل مع الحدث.

هل هناك أي شيء يمكنني القيام به في الطبقات BO لإجبار التحكم لوردت إلى الحدث INotifyPropertyChanged؟ أم أن هناك شيئا آخر يمكنني إلى داخل الطبقة BO للحصول على التحكم لعرض القيمة الصحيحة؟

وأنا أدرك أنني يمكن التعامل مع هذا في رمز GUI بطرق مختلفة ولكن هذا ليس هدفي.

هل كانت مفيدة؟

المحلول

ولقد وجدت جوابا.

أولا هذه مشكلة، وقد لاحظ روكي Lhotka. الحل اعتدت جاء منه.

والأولى كان لديه السيطرة يمكنك إسقاط على عنصر تحكم النموذج أو المستخدم وأنه لا يحل المشكلة.

وكان لديه أيضا بعض التعليمات البرمجية التي I معدلة بشكل طفيف واستخدامها ووضعها على شكل قاعدتنا وتحكم المستخدم.

Private Sub baseUserControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    HookBindings(Me)
End Sub

Private Sub HookBindings(ByVal CNTRL As Control)
    For Each ctl As Control In CNTRL.Controls
        If Not TypeOf ctl Is baseUserControl Then
            For Each b As Binding In ctl.DataBindings
                AddHandler b.BindingComplete, AddressOf ReadBinding
            Next
            HookBindings(ctl)
        End If
    Next
End Sub

Private Sub ReadBinding(ByVal sender As Object, ByVal e As BindingCompleteEventArgs)
    e.Binding.ReadValue()
End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top