ho una classe che implementa INotifyPropertyChanged
come questo:switch-case su Class.PropertyName (non il valore)
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));
}
}
Quando il setter Color
proprietà viene chiamata, si chiama RaisePropertyChanged()
che ottiene automaticamente il nome della proprietà cioè "Color"
e lo usa per popolare PropertyChangedEventArgs
. Invece di digitare manualmente il nome della proprietà.
Questo è utile perché impedisce possibili errori nel codice poiché non è necessario digitare manualmente il nome della proprietà. Aiuta anche nel refactoring del codice poiché non stai codificando le stringhe.
La mia domanda
Ho un gestore di eventi per PropertyChanged
. Come posso utilizzare un costrutto switch-case senza hard-coding dei nomi di proprietà come stringhe. Quindi qualcosa del genere:
void Person_PropertyChanged(object sender, PropertyChangedEventArgs e){
switch (e.PropertyName)
{
case PropertyNameOf(Person.Color);
//some stuff
break;
default:
break;
}
}
È possibile? Voglio fare questo in modo da poter mantenere i benefici che ho citato sopra.
Cosa devi fare all'interno del 'caso'? –
@NateBarbettini Alcune cose. L'ho lasciato fuori perché non penso fosse pertinente alla domanda – Krimson
Stai cercando l'operatore 'nameof' del C# 6. – SLaks