|
| |

VB.NET - Ein- und Umsteiger| Re: Problem mit UserControl und dessen Datenbindung | |  | | Autor: Maas | | Datum: 21.11.11 22:40 |
| Mal ganz allgemein: Es gibt Klassen, welche ein übergebenes Objekt auf dieses Interface prüfen. Ist es vorhanden, können diese Klassen durch das Event erkennen, wann eine Property geändert wurde (soweit dies implementiert ist). Dann kann die Klasse darauf regieren.
Hier mal ein sehr simples Beispiel für die Benutzung des Interfaces:
Imports System.ComponentModel
Imports System.Reflection
Public Class Form1
Private mDataClass As MyNormalDataClass = Nothing
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
mDataClass = New MyBindableDataClass()
Me.BindOnTextBox1(mDataClass, "Test")
'mDataClass = New MyNormalDataClass
'Me.BindOnTextBox1(mDataClass, "Test")
End Sub
Private Sub TextBox2_TextChanged(sender As System.Object, e As _
System.EventArgs) Handles TextBox2.TextChanged
mDataClass.Test = TextBox2.Text
End Sub
#Region "Binding"
Private WithEvents mBindedObject As Object = Nothing
Private mBindedProperty As String = String.Empty
Private Sub BindOnTextBox1(o As Object, prp As String)
If mBindedObject IsNot Nothing AndAlso TypeOf mBindedObject Is _
INotifyPropertyChanged Then
RemoveHandler CType(mBindedObject, _
INotifyPropertyChanged).PropertyChanged, AddressOf _
Me.BindedObject_PropertyChanged
End If
mBindedObject = o
mBindedProperty = prp
If o IsNot Nothing AndAlso TypeOf o Is INotifyPropertyChanged Then
AddHandler CType(o, INotifyPropertyChanged).PropertyChanged, _
AddressOf Me.BindedObject_PropertyChanged
End If
End Sub
Private Sub BindedObject_PropertyChanged(sender As Object, e As _
PropertyChangedEventArgs)
If e.PropertyName = mBindedProperty Then
Dim t As Type = mBindedObject.GetType
For Each prpInfo As PropertyInfo In t.GetProperties
If prpInfo.Name = mBindedProperty And prpInfo.CanRead Then
TextBox1.Text = prpInfo.GetValue(mBindedObject, Nothing)
End If
Next
End If
End Sub
#End Region
End Class
Public Class MyBindableDataClass
Inherits MyNormalDataClass
Implements System.ComponentModel.INotifyPropertyChanged
Public Event PropertyChanged(sender As Object, e As _
System.ComponentModel.PropertyChangedEventArgs) Implements _
System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Public Overrides Property Test As String
Get
Return MyBase.Test
End Get
Set(value As String)
MyBase.Test = value
RaiseEvent PropertyChanged(Me, New _
System.ComponentModel.PropertyChangedEventArgs("Test"))
End Set
End Property
End Class
Public Class MyNormalDataClass
Private mTest As String = String.Empty
Public Overridable Property Test As String
Get
Return mTest
End Get
Set(value As String)
mTest = value
End Set
End Property
End ClassIch glaube allerdings nicht, dass die meisten Klassen, welche auf das Interface reagieren können, auch Reflection wie bei mir im Beispiel bei BindedObject_PropertyChanged benutzen (das wäre wohl ziemlich unperformant, oder?). Wie genau intern an die Werte gekommen wird kann ich nicht sagen (da müsste man wohl den Quell-Code von .NET durchforsten), aber es wird auf jeden Fall der Wert vom gebundenen Objekt geholt und weiterverarbeitet. Entscheidend dabei ist die Eigenschaft PropertyName vom PropertyChangedEventArgs.
Maas |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
| |
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|