Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0090: Synchronisieren mit Databinding

 von 

Beschreibung

Datenbindung (Databinding) funktioniert nicht nur mit Listen, sondern auch mit Einzelobjekten, sofern sie die Schnittstelle "System.ComponentModel.INotifyPropertyChanged" implementieren. Das ist sehr nützlich bei der Synchronisation von Eigenschaften.

Hier implementiert das Form selbst "INotifyPropertyChanged", und wird so zur Datenquelle, an deren Property "Brightness" zwei Textboxen und eine Scrollbar gebunden sind. Effekt: Ohne Ereigniscode kann über drei Eingabekanäle die Helligkeit eingestellt werden. Die Synchronisierung der Steuerelemente erfolgt dabei automatisch.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [11,9 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2005
' Option Strict:    An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - Microsoft.VisualBasic.ControlChars
'  - System
'  - System.Collections.Generic
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'

' ##############################################################################
' ############################ frmDirectBinding.vb #############################
' ##############################################################################
Imports System.ComponentModel

Public Class frmDirectBinding
    'Das Interface "INotifyPropertyChanged" stellt einen Benachrichtigungsmechanismus, den das
    ' DataBinding benutzen kann...
    Implements INotifyPropertyChanged

    '...nämlich dieses Event
    Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) _
       Implements INotifyPropertyChanged.PropertyChanged

    Private _Brightness As Byte
    Public Property Brightness() As Byte
        Get
            Return _Brightness
        End Get
        Set(ByVal Value As Byte)
            _Brightness = Value

            ' drei gleiche Farbkomponenten ergeben einen Grauwert in angegebener Helligkeit
            MyBase.BackColor = Color.FromArgb(Value, Value, Value)

            'Alle angeschlossenen Bindings benachrichtigen, daß Brightness geändert wurde
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Brightness"))
        End Set
    End Property

    Private Sub frmDirectBinding_Load(ByVal sender As Object, ByVal e As EventArgs) _
          Handles MyBase.Load
        TextBox1.DataBindings.Add("Text", Me, "Brightness", False, DataSourceUpdateMode.OnPropertyChanged)

        ' DataSourceUpdateMode.OnValidation:  Textänderungen werden erst nach Validierung wirksam
        '                                                              (i.A. nach Fokusverlust)   
        ' nullValue:                          hat bei Valuetypen (hier: Byte) keine Wirkung
        ' formatString "c":                   spaßeshalber Werte als Währung (Currency) anzeigen
        TextBox2.DataBindings.Add( _
            "Text", Me, "Brightness", formattingEnabled:=True, _
            updateMode:=DataSourceUpdateMode.OnValidation, _
            nullValue:=Nothing, formatString:="c")
        HScrollBar1.DataBindings.Add( _
            "Value", Me, "Brightness", False, DataSourceUpdateMode.OnPropertyChanged)
        Me.Brightness = 127
    End Sub

End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Anhang E-Mail - cahell 19.11.13 21:13 8 Antworten