ich eine Klasse, die INotifyPropertyChanged
wie folgt implementiert:Schalter-Kasten Class.PropertyName (nicht Wert)
public class Person : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
string _color;
public string Color
{
get{ return _color; }
set
{
_color = value;
RaisePropertyChanged();
}
}
...
private void RaisePropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
Wenn die Color
Eigenschaft Setter genannt wird, es RaisePropertyChanged()
nennt, die automatisch den Eigenschaftsnamen dh "Color"
bekommt und verwendet diese um PropertyChangedEventArgs
zu füllen. Anstatt dass Sie den Eigenschaftsnamen manuell eingeben.
Das ist gut, weil es mögliche Fehler in Ihrem Code verhindert, da Sie den Eigenschaftsnamen nicht manuell eingeben müssen. Dies hilft auch beim Refactoring Ihres Codes, da Sie keine Strings codieren.
Meine Frage
Ich habe einen Event-Handler für PropertyChanged
. Wie kann ich ein Switch-Case-Konstrukt verwenden, ohne die Eigenschaftsnamen als Strings hart zu codieren? So etwas wie das:
void Person_PropertyChanged(object sender, PropertyChangedEventArgs e){
switch (e.PropertyName)
{
case PropertyNameOf(Person.Color);
//some stuff
break;
default:
break;
}
}
Ist das möglich? Ich möchte das tun, damit ich die Vorteile, die ich oben erwähnt habe, behalten kann.
Was müssen Sie innerhalb des 'case' tun? –
@NateBarbettini Einige Sachen. Ich habe es ausgelassen, weil ich denke, dass es für die Frage – Krimson
nicht relevant war. Sie suchen nach C# 6 'nameof' -Operator. – SLaks