Sto scrivendo un controllo personalizzato e ho un percorso di proprietà come stringa (si consideri comboBox.SelectedValuePath
).
Qual è il modo migliore nel codice per valutare questa stringa per un oggetto arbitrario?WPF Come dovrei valutare un percorso di proprietà?
Ovviamente posso solo analizzarlo da solo, ma è un trucco, e voglio il percorso per supportare tutto ciò che fa comboBox.SelectedValuePath
(per coerenza).
Risultato (grazie a Aran Mulholland):
Non sono sicuro circa le prestazioni di questo, ma non mi interessa tanto per le prestazioni in questo momento.
public class BindingEvaluator {
#region Target Class
private class Target : DependencyObject {
public static readonly DependencyProperty ResultProperty = DependencyProperty.Register(
"Result", typeof(IEnumerable), typeof(BindingEvaluator)
);
public object Result {
get { return this.GetValue(ResultProperty); }
set { this.SetValue(ResultProperty, value); }
}
}
#endregion
public object GetValue(object source, string propertyPath) {
var target = new Target();
BindingOperations.SetBinding(target, Target.ResultProperty, new Binding(propertyPath) {
Source = source,
Mode = BindingMode.OneTime
});
return target.Result;
}
}
E 'da notare che il tipo dichiarato di DependencyProperty in Target è IEnumerable quando la proprietà Result è di tipo object? – dtm
@dtm probabilmente è solo il mio errore - ha pubblicato la versione intermedia invece del finale. comunque è stato tanto tempo fa e non ricordo. se trovo questo codice, correggo la domanda, altrimenti se l'hai testato per favore fammi sapere le tue scoperte. –
Ho implementato qualcosa di simile con i tipi corrispondenti per la proprietà di dipendenza e la proprietà stessa; tuttavia, e sorprendentemente, funziona ancora se sostituisco IEnumerable al posto di Object in DepedencyProperty.Register. Non sai cosa fare di questo ... – dtm