Dazu gibt's nichts Fertiges.
Du hast zwei Möglichkeiten:
1. In jeder Property einzeln loggen
2. Eine eigene Klasse schreiben, die soetwas erlaubt
Variante 1:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private bool _value1; private bool _value2;
public bool Value1 { get => _value1; set { LogValueChange(nameof(Value1), _value1, value);
_value1 = value; } } public bool Value2 { get => _value2; set { LogValueChange(nameof(Value2), _value2, value);
_value2 = value; } }
private void LogValueChange(string propertyName, bool oldValue, bool newValue) { } |
Variante 2:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| public class ValueTracker { private readonly Dictionary<string, object> _propertyValues;
public T GetValue(string propertyName) { return (T)_propertyValues.GetOrAdd(propertyName, default(T)); } public void SetValue<T>(string propertyName, T value) { LogValueChange(propertyName, GetValue<T>(propertyName), value);
_propertyValues[propertyName] = value; }
private void LogValueChange(string propertyName, bool oldValue, bool newValue) { } }
public class MyClass { private readonly ValueTracker _valueTracker;
public bool Value1 { get => _valueTracker.GetValue<bool>(nameof(Value1)); set => _valueTracker.SetValue(nameof(Value1), value); } public bool Value2 { get => _valueTracker.GetValue<bool>(nameof(Value2)); set => _valueTracker.SetValue(nameof(Value2), value); } } |
Das als sehr rudimentäre Beispiele
Letzteres lohnt sich besonders bei WPF, da sich die nötige Grundlage für das DataBinding verallgemeinern lässt.