ApplyValueConverter
jest zdefiniowany jako statyczny delegat Func<>
w klasie ConventionManager
.
W celu zapewnienia własnego konwertera w scenariuszach konferencyjnych wiążąca, trzeba zdefiniować własny Func<>
w sposobie swojego inicjującego Configure()
, coś takiego:
UWAGA: jestem zakładając Konwersję od string
do Opacity
.
public class AppBootstrapper : Bootstrapper<ShellViewModel> {
private static IValueConverter StringToOpacityConverter = new StringToOpacityConverter();
public override void Configure() {
var oldApplyConverterFunc = ConventionManager.ApplyValueConverter;
ConventionManager.ApplyValueConverter = (binding, bindableProperty, property) => {
if (bindableProperty == UIElement.Opacity && typeof(string).IsAssignableFrom(property.PropertyType))
// ^^^^^^^ ^^^^^^
// Property in XAML Property in view-model
binding.Converter = StringToOpacityConverter;
// ^^^^^^^^^^^^^^^^^^^^^^^^^
// Our converter used here.
// else we use the default converter
else
oldApplyConverterFunc(binding, bindableProperty, property);
};
}
}
Wow, wiesz, że używam go od jakiegoś czasu, a ja nawet nie zdawałem sobie sprawy, że istnieje konwencja dla konwerterów wartości! Pozwala to zaoszczędzić sporo pisania! – Charleh
@Charleh Najśmieszniejsze jest to, że nie wiedziałem, zanim OP zapytał :). Jestem szczęśliwy, że się tego nauczyłem. –
To JEDNA rzecz, której nienawidzę, ale nigdy nie myślałam o sprawdzeniu, czy istnieje wsparcie dla ... (większość) konwerterów jest tak mało zarabiających, jeśli chodzi o ilość pisania w porównaniu do wypłaty! – Charleh