AOP, PostSharp e M-V-VM
Il comando “Browse” non è attivo se la casella di testo “Criteri di Ricerca” (in binding con la proprietà QueryText del VM) è vuota, quando la proprietà QueryText cambia dobbiamo triggerare la rivalutazione dell’eseguibilità dell’ICommand.Questo in termini di codice spesso si traduce in qualcose del tipo:
Che non è nulla di trascendentale, ma è una gran rottura e tutte le volte va a finire che me lo dimentico; me lo dimentico perchè devo scriverlo li, o comunque lontano dal ICommand, non sarebbe molto meglio scrivere:public static readonly DependencyProperty QueryProperty = DependencyProperty.Register( "Query", typeof( String ), typeof( SubjectBrowserViewModel ), new PropertyMetadata( String.Empty, ( s, e ) => { s.CastTo<SubjectBrowserViewModel>() .Browse.CastTo<DelegateCommand>() .ReevaluateCanExecute(); } ) ); public String Query { get { return ( String )this.GetValue( QueryProperty ); } set { this.SetValue( QueryProperty, value ); } }
e processare in fase di build, quindi niente reflection a runtime, quell’attributo per gestire in maniera implicita la sincronia tra i 2 signori?[ReevaluateOnChange( "Query" )] public IBindableCommand Browse { get; private set; }
Che ne pensate?
.m