Problem mit Properties und DataBinding

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Problem mit Properties und DataBinding

    Hallo Zusammen,

    ich habe ein kleines Problem was das DataBinding von Properties angeht.

    Ich erstelle in einer Klasse Properties, die mit Daten aus einer SQL-Datenbank gefüllt werden. Dies funktioniert auch problems und die Properties werden sauber befüllt.
    Die Daten bestehen aus einem eindeutigen "Textbaustein" und dem zugehörigen Text.

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Imports System.Resources
    3. Imports System.Reflection
    4. Public Class clsSprache
    5. Implements INotifyPropertyChanged
    6. Public Event PropertyChanged(ByVal sender As Object, ByVal e As
    7. PropertyChangedEventArgs) Implements
    8. INotifyPropertyChanged.PropertyChanged
    9. Private Sub NotifyPropertyChanged(ByVal info As String)
    10. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    11. End Sub
    12. '##### AB HIER FOLGT MEIN PROBLEM ####
    13. Public ReadOnly Property txt00001() As String
    14. Get
    15. Return GetText("txt00001", frm_mainform.LCProp.Sprache)
    16. End Get
    17. End Property
    18. Public ReadOnly Property txt00002() As String
    19. Get
    20. Return GetText("txt00002", frm_mainform.LCProp.Sprache)
    21. End Get
    22. End Property
    23. Public ReadOnly Property txt00003() As String
    24. Get
    25. Return GetText("txt00003", frm_mainform.LCProp.Sprache)
    26. End Get
    27. End Property
    28. Public ReadOnly Property txt00004() As String
    29. Get
    30. Return GetText("txt00004", frm_mainform.LCProp.Sprache)
    31. End Get
    32. End Property
    33. '...
    34. End Class


    Diese Properties binde ich dann wie folgt an verschiedene Objekte auf der Form.

    VB.NET-Quellcode

    1. Me.Button1.DataBindings.Add("Text", frm_mainform.LCSprachLib, "txt00009")


    Mein Problem ist jetzt, dass ich ca. 4000 solcher Textbausteine habe und ich für jedes einzelne eine Property erstellen müsste, die i.d.R. bis auf den abgefragten Textbaustein / Name der Property immer gleich aussieht.
    Gibt es hierfür eine einfachere Lösung? Ich habe dies schon mit dynamischen Properties versucht, da VB.NET aber eine statische Sprache ist, ist dies anscheinend nur mit "Dictionaries" möglich, die sich wiederum nicht binden lassen.
    Urspr. Lösung war, alle Textbausteine auszulesen und wie folgt in eine Sammlung zu laden:

    VB.NET-Quellcode

    1. Class Foo
    2. Private _map as New Dictionary(Of String, Object)
    3. Public Sub AddProperty(name as String, value as Object)
    4. _map(name) = value
    5. End Sub
    6. Public Function GetProperty(name as String) as Object
    7. return _map(name)
    8. End Function
    9. End Class


    AddProperty() hat den Wert hinzugefügt, mit GetProperty() hat man den entsprechenden Wert zurückerhalten. Thema hierbei war das Binding....
    Wichtig bei der Sache ist, dass die Objekte auf der Form per INotifyPropertyChanged zur Laufzeit aktualisiert werden können.
    Daher scheidet

    VB.NET-Quellcode

    1. Me.Button1.Text = frm_mainform.LCSprachLib.GetProperty("txt00009")

    aus

    Viele Grüße
    Sven

    elBee163 schrieb:

    Mein Problem ist jetzt, dass ich ca. 4000 solcher Textbausteine habe und ich für jedes einzelne eine Property erstellen müsste

    Du willst damit sagen, auf deim Form fahren 4000 Buttons rum?

    Das scheint mir v.a. ein Design-Problem - wunder mich, dass so ein überladenes Form ühaupt arbeitsfähig ist.

    Man könnte etwa in ein DGV eine ButtonColumn einbasteln - das spart resourcen und ist vlt auch noch iwie bedienbar.
    nein, nicht Buttons, u.a. Labels.. weitergehend nicht auf einer Form, sondern mehreren UserControls... der Button war nur als Beispiel gedacht...
    das sind deutlich weniger... Thema ist das ich eine Sprachbibliothek habe (deutsch, englisch, französisch, spanisch). Hier möchte ich den Textinhalt
    z.B. von einem Button, Menüpunkt, Label, ComboBoxInhalten etc... als Ausgabe in der jeweiligen Sprache ermöglichen. Die gesamte Sprachbibliothek
    hat 4.101 Einträge.
    Ich bin mal so dreist:

    RodFromGermany schrieb:

    Willkommen im Forum.
    Wenn Du Dein Programm mehrsprachig machen willst, gugst Du hier:
    Programme mehrsprachig erstellen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für den Hinweis mit der Ressourcendatei... das weiß ich auch, leider muss die Datenbasis die SQL-Datenbank sein...
    Weiterhin benötige ich weder den Hinweis das ich ein Designproblem habe oder wie man mehrsprachig entwickelt...

    Ich wollte doch einfach nur wissen, kann ich eine Property dynamisch erstellen und diese per DataBindings.Add("TEXT",foo,"BAR") binden.
    Und ja, das geht!

    Problem selbst gelöst!