C# 如何将ValueConverter应用于基于约定的Caliburn.Micro绑定示例?

C# 如何将ValueConverter应用于基于约定的Caliburn.Micro绑定示例?,c#,xaml,binding,windows-phone-8,caliburn.micro,C#,Xaml,Binding,Windows Phone 8,Caliburn.micro,我看到了以下问题: 我无法就这个话题发表评论,所以我将我的问题发布在这里 在使用基于约定的绑定时,如何使用Caliburn.Micro中的值转换器 有人能在这里写一个例子吗?ApplyValueConverter被定义为ConventionManager类中的静态Func委托 为了在约定绑定场景中提供自己的转换器,您需要在引导程序的Configure()方法中定义自己的Func,如下所示: 注意:我假设转换是从字符串到不透明度 public class AppBootstrapper : Boo

我看到了以下问题:

我无法就这个话题发表评论,所以我将我的问题发布在这里

在使用基于约定的绑定时,如何使用Caliburn.Micro中的值转换器


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

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

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

注意:我假设转换是从
字符串
不透明度

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

        };
    }

}
公共类AppBootstrapper:Bootstrapper{
私有静态IValueConverter StringToPacityConverter=新StringToPacityConverter();
公共覆盖无效配置(){
var oldApplyConverterFunc=ConventionManager.ApplyValueConverter;
ConventionManager.ApplyValueConverter=(绑定、bindableProperty、属性)=>{
if(bindableProperty==UIElement.Opacity&&typeof(string.IsAssignableFrom(property.PropertyType))
//                                ^^^^^^^           ^^^^^^
//XAML中的属性视图模型中的属性
binding.Converter=StringToPacityConverter;
//                  ^^^^^^^^^^^^^^^^^^^^^^^^^
//我们这里用的转换器。
//否则我们使用默认的转换器
其他的
oldApplyConverterFunc(绑定、bindableProperty、property);
};
}
}

Wow,你知道我使用它已经有一段时间了,我甚至没有意识到有一个价值转换器的惯例!这节省了大量的打字@查理:有趣的是,在OP提问之前我并不知道:)。我很高兴我也学到了这一点。这是我最讨厌的一件事,但我从未想过要检查是否有人支持。。。。(大多数)当涉及到输入量和回报时,转换器对你的成本几乎没有什么好处!