| Zitat: |  |
Ist aber so oder so rel. aufwändig, also auf jeden Fall muss man "manuell" alle Properties durchlaufen - zumindest die Referenz-Typen.
|  |
Ich finde es für mein doch recht beschränktes Wissen über die Programmierung wirklich zu aufwendig.
Der Link auf das Video würde mich trotzdem mal interessieren. Ich versuche ja auch dazuzulernen
Ich habe jetzt doch noch einmal weitere Versuche mit meiner "Grundidee" gemacht und etwas funktionierendes hinbekommen:
- Beim Aufrufen der Form Einstellungen werden die Einstellungen aus der Hauptform geclont.
- Es werden nur die Werte in den geclonten Einstellungen angepasst.
- Werden die neuen Einstellungen gespeichert/bestätigt wird mit der Sub CopyValues alle Werte einzeln in das Einstellungsobjekt der Hauptform kopiert. Dabei werden auch die Notifys automatisch ausgelöst und die datenbindung bleibt erhalten.
Klasse Einstellungen (Laden und Speichern gekürzt):
Public Class demo
Public Property var1 As String = "var1"
Public Property var2 As Boolean = True
End Class
<Serializable()> _
Public Class clsEinstellungen
Implements System.ComponentModel.INotifyPropertyChanged
Implements ICloneable
Private _Test1 As String = "Test1"
Property Test1 As String
Get
Return _Test1
End Get
Set(value As String)
_Test1 = value
NotifyPropertyChanged("Test1")
End Set
End Property
Private _Test2 As String = "Test2"
Property Test2 As String
Get
Return _Test2
End Get
Set(value As String)
_Test2 = value
NotifyPropertyChanged("Test2")
End Set
End Property
Private _MyInteger As Integer = 12345
Property MyInteger As Integer
Get
Return _MyInteger
End Get
Set(value As Integer)
_MyInteger = value
NotifyPropertyChanged("MyInteger")
End Set
End Property
Private _MyBoolean As Boolean = False
Property MyBoolean As Boolean
Get
Return _MyBoolean
End Get
Set(value As Boolean)
_MyBoolean = value
NotifyPropertyChanged("MyBoolean")
End Set
End Property
Private _MyDemo As New List(Of demo)
Property MyDemo As List(Of demo)
Get
Return _MyDemo
End Get
Set(value As List(Of demo))
_MyDemo = value
NotifyPropertyChanged("MyDemo")
End Set
End Property
Public Sub CopyValues(ByVal S As clsEinstellungen, ByVal Z As _
clsEinstellungen)
For Each Zpi As System.Reflection.PropertyInfo In _
Z.GetType.GetProperties
Dim Spi As System.Reflection.PropertyInfo = S.GetType.GetProperty( _
Zpi.Name)
Dim value = Spi.GetValue(S, Nothing)
Debug.WriteLine(S.GetType.GetProperty(Zpi.Name).ToString & " wird" & _
"von " & Zpi.GetValue(Z, Nothing).ToString & " in " & _
value.ToString & " geändert.")
Zpi.SetValue(Z, value, Nothing)
Next
End Sub
Public Function Clone() As Object Implements System.ICloneable.Clone
Return MemberwiseClone()
End FunctionForm Einstellungen:
Public Class FrmEinstellungen
Private MyEinstellungen As New clsEinstellungen
Private Sub FrmEinstellungen_Load(sender As System.Object, e As _
System.EventArgs) Handles MyBase.Load
MyEinstellungen = Form1.Einstellungen.Clone
TextBox1.DataBindings.Add(New Binding("Text", MyEinstellungen, "Test1", _
True, DataSourceUpdateMode.OnPropertyChanged))
TextBox2.DataBindings.Add(New Binding("Text", MyEinstellungen, "Test2", _
True, DataSourceUpdateMode.OnPropertyChanged))
txtbxInteger.DataBindings.Add(New Binding("Text", MyEinstellungen, _
"MyInteger", True, DataSourceUpdateMode.OnPropertyChanged))
TxtbxLong.DataBindings.Add(New Binding("Text", MyEinstellungen, _
"MyLong", True, DataSourceUpdateMode.OnPropertyChanged))
chkbx.DataBindings.Add(New Binding("Checked", MyEinstellungen, _
"MyBoolean", True, DataSourceUpdateMode.OnPropertyChanged))
End Sub
Private Sub BtnAbbrechen_Click(sender As System.Object, e As _
System.EventArgs) Handles BtnAbbrechen.Click
Me.Close()
End Sub
Private Sub BtnSpeichern_Click(sender As System.Object, e As _
System.EventArgs) Handles BtnSpeichern.Click
Form1.Einstellungen.CopyValues(MyEinstellungen, Form1.Einstellungen)
Me.Close()
End Sub
End ClassNatürlich ist das so ohne Fehlerbehandlung. Auch fehlt z.B. das Prüfen, ob die Property neu gesetzt werden muss (Werte gleich)
Was haltet ihr davon? Oder ist das so fern von der Realität, das ich das nicht machen sollte?
Gruß
Bismosa |