Legen Sie Objekteigenschaftswerte basierend auf einer anderen Eigenschaftsinstanz festC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Legen Sie Objekteigenschaftswerte basierend auf einer anderen Eigenschaftsinstanz fest

Post by Anonymous »

Ich habe zwei Instanzen einer Klasse, in denen ich alle Werte in einer Instanz durch die einer anderen Instanz ersetzen möchte, um die Rückgängig-Funktionalität zu implementieren.
Im folgenden Beispiel _selectedMessage enthält die ursprünglichen Werte und selectedMessage enthält die geänderten Werte, die ich auf die in _selectedMessage enthaltenen Werte zurücksetzen möchte (

Code: Select all

_selectedMessage
ist ein MemberwiseClone() von selectedMessage)
Dies wäre der einfachste Weg, außer dass es nicht funktioniert:

Code: Select all

selectedMessage = _selectedMessage;
Dies funktioniert, würde aber die Auflistung aller Felder erfordern:

Code: Select all

selectedMessage.Subject = _selectedMessage?.Subject;
Auf dieser Grundlage versuche ich, die Modelleigenschaften zu durchlaufen, um sie festzulegen, ohne sie alle explizit auflisten zu müssen, außer aus irgendeinem Grund funktioniert es nicht, aber ich denke, es muss nah dran sein.< /p>

Code: Select all

PropertyInfo[]? properties = _selectedMessage?.GetType().GetProperties();
if (properties != null)
{
foreach (PropertyInfo property in properties)
{
// Get the name and value of each property
string? propertyName = property.Name;
object? propertyValue = property.GetValue(selectedMessage);

selectedMessage?.GetType().GetProperty(propertyName)?.SetValue(selectedMessage, propertyValue);
}
}
Mit der obigen Schleife werden keine Werte zurückgeändert, aber es gibt auch keine Fehler.
Was könnte ich falsch machen?Um etwas Kontext dazu hinzuzufügen, warum ich das mache, habe ich ein Blazor WASM QuickGrid, das die Liste der Datensätze anzeigt:
[img]https:/ /i.sstatic.net/oTKHaKoA.png[/img]

Wenn der Benutzer dann einen Datensatz ohne die unten hinzugefügte Lösung öffnet, werden alle Änderungen am Datensatz sofort im Raster dahinter widergespiegelt, sodass das Formular zwar über Schaltflächen zum Speichern und Abbrechen verfügt, während zum Abbrechen Schaltflächen vorhanden sind Aktualisiert die Datenbank nicht, sondern lässt den Datensatz so aussehen, als wäre er im Raster geändert worden. Ich muss also abbrechen, um ihn wiederherzustellen:
[img]https://i .sstatic.net/Um8FQVQE.png[/img]

Was ich jetzt mache, ist, das Objekt auf das temporäre Objekt zu klonen, wenn das Bearbeitungsformular geöffnet wird, das temporäre Objekt für das Formular als Ziel auszuwählen und dann, nachdem ich bestätigt habe, dass die Remote-API-Datenbank gespeichert wurde Erfolgreich, Festlegen der Hauptobjekteigenschaften auf die temporären Eigenschaften. Auf diese Weise wird das Raster nicht verändert, sodass Abbrechen das Formular jetzt einfach schließen kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post