5

我看到了以下问题:how-do-you-apply-a-valueconverter-to-a-convention-based-caliburn-micro-binding

我无法就该主题发表评论,所以我在这里发布我的问题。

ConventionManager.ApplyValueConverter使用基于约定的绑定时如何将Caliburn.Micro 中的值转换器用于值转换器?

有人可以在这里写一个例子吗?

4

1 回答 1

8

ApplyValueConverter被定义为类Func<>中的静态委托ConventionManager

为了在约定绑定场景中提供您自己的转换器,您需要在引导程序Func<>的方法中定义自己的转换器,如下所示:Configure()

注意:我假设转换是从stringOpacity

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);

        };
    }

}
于 2013-10-04T09:43:09.423 回答