2013-10-04 10 views
5

は、私は、次の質問を見てきました:how-do-you-apply-a-valueconverter-to-a-convention-based-caliburn-micro-bindingを。コンベンションベースのCaliburn.Microバインディングの例に、ValueConverterをどのように適用しますか?

私はそのトピックにコメントを投稿することができませんでしたので、私はここで私の質問を投稿しています。結合に基づく規則を使用している場合

どのように値コンバータにCaliburn.MicroでConventionManager.ApplyValueConverterを使用するには?

誰もがここでの例を書きませんか?

答えて

7

ApplyValueConverterは、ConventionManagerクラスの静的Func<>代理人として定義されています。

大会結合のシナリオでは、独自のコンバータを提供するために、あなたはあなたのブートストラップのConfigure()方法でFunc<>独自に定義する必要があり、このような何か:

注:私は、変換を想定していますですから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); 

     }; 
    } 

} 
+0

うわー、私はそれを公正に使用してきたことを知っていますし、価値コンバーターのためのコンベンションがあったこともわかりませんでした。これは大量の入力を省くことができます! – Charleh

+0

@Charleh面白いことは、私はOPが尋ねる前に知らなかったということです。私もそのことを知ってうれしいです。 –

+1

それはペイオフ対入力の量になると(ほとんど)コンバータは、あなたの木びき台のためので、少し強打されている....私は嫌いONEのことだが、のためのサポートがあったかどうかをチェックするために思ったことはありません! – Charleh

関連する問題