منع تغيير الخاصية في ربط البيانات وقوة تحكم منضم لإظهار القيمة الحالية
-
21-08-2019 - |
سؤال
ولدي
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