vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

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 Class
Ich 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem mit UserControl und dessen Datenbindung1.459Waver21.11.11 11:52
Re: Problem mit UserControl und dessen Datenbindung972Manfred X21.11.11 12:28
Re: Problem mit UserControl und dessen Datenbindung1.061Waver21.11.11 12:48
Re: Problem mit UserControl und dessen Datenbindung938Manfred X21.11.11 12:58
Re: Problem mit UserControl und dessen Datenbindung865Waver21.11.11 14:14
Re: Problem mit UserControl und dessen Datenbindung975Manfred X21.11.11 14:20
Re: Problem mit UserControl und dessen Datenbindung878Waver21.11.11 21:38
Re: Problem mit UserControl und dessen Datenbindung876Manfred X21.11.11 22:30
Re: Problem mit UserControl und dessen Datenbindung883Maas21.11.11 22:40
Re: Problem mit UserControl und dessen Datenbindung869Waver22.11.11 00:00

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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