2017-05-16 9 views
0

MvvmCrossで値コンバータを使用してiOSラベルのテキストの色を変更しようとしています。ここでは、コードの少しは(これは、コア事業である)です。Xamarin MvvmCross iOS Bool to Color ValueConverterラベルテキストの色が変更されない

public class BoolToColorValueConverter 
     : MvxValueConverter<bool, object> 
    { 
     protected override object Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      MvxColor mvxColor = null; 
      if(value) 
       mvxColor = new MvxColor(255, 0, 0); 
      else 
       mvxColor = new MvxColor(0, 0, 0); 

      var nativeColorConv = Mvx.Resolve<IMvxNativeColor>(); 

      return nativeColorConv.ToNative(mvxColor); 
     } 
    } 

そして、私の結合に:

this.CreateBinding(LabelName).For(s => s.TextColor).To((MyViewModel vm) => vm.BooleanPropertyThatChangesAtSomePoint).WithConversion("BoolToColor").Apply(); 

しかし、真から偽のブールプロパティの変更何らかの理由そのプロパティに正しくバインドされている他のフィールドは正しく表示されますが、ラベルのテキストの色は表示されません。

@slodgeのビデオ、チュートリアル、ダウンロードされたgitの例を見たことがありますが、まだこれを動作させることはできません。私はブレークポイントを入れてコンバータが起動されているので、コンバータが適切な値を返さないことと関係していると思います。何か案は?コードのその部分は、アプリ内のTextColorへの参照のみである場合LinkerBehaviourLink SDK assemblies onlyまたはLink all assembliesに設定されている場合

答えて

1

まず、次いで組立リンクプロセスは、おそらくUILabelの特性のいくつかを離れて最適化されます。それはあなたのプロジェクトの場合であれば、修正には(理想的ではない)Don't linkLinkerBehaviourを変更したり、LinkerPleaseIncludeに次のメソッドを追加することのいずれかです:

public void Include() 
{ 
    var label = new UILabel 
    { 
     TextColor = UIColor.Black 
    }; 
} 

それが唯一の問題でない場合は、 Mvx Color Pluginをインストールしていません。そうすることで、あなたの問題が解決されます。そうでない場合は、次のようにバインドをやり直すことを検討してください。

var bindingSet = this.CreateBindingSet<MyViewController, MyViewModel >(); 

bindingSet.Bind(LabelName).For(c => c.TextColor).To(vm => vm.TestBoolean).WithConversion(new BoolToColorValueConverter()); 

bindingSet.Apply(); 

P.S. - ただ、ヒント:

public class BoolToColorValueConverter : MvxColorValueConverter 
{ 
    protected override MvxColor Convert(object value, object parameter, CultureInfo culture) 
    { 
     return (bool)value 
      ? new MvxColor(255, 0, 0) 
      : new MvxColor(0, 0, 0); 
    } 
} 
+0

おかげでルークと編集のための感謝:

カラープラグインは、あなたの色変換を行うために、より簡潔な方法をご提供し、あなたがMvxColorValueConverterにアクセスすることができます。私はMvxColorsプラグをインストールしています。私はLinkerPleaseIncludeのアプローチを得ていません。私は私のプロジェクトでそのクラスを見つけることができないので、手動で追加する必要があると思います。私はMvxColorValueConverterを使用してあなたのアプローチに従ったが、私はアプリケーションが起動するとエラーが発生します。私はあなたの提案を守り、それがどのように進むのかを教えてくれるでしょう。 – Ph0b0x

+0

実際には、MvxColorアプローチを使用していました。私はIOSプロジェクトでMvx Color Pluginを見逃していました。私はコアプロジェクトでそれを持っていましたが、IOSのものではありませんでした。ルークに感謝します。 – Ph0b0x

+0

Mvxプラグインを使用する際の一般的な経験則は、コアプロジェクトとプラットフォームプロジェクトの両方にプラグインを追加することです。プラグインには通常、移植可能なインタフェースとプラットフォーム固有の実装があります。したがって、両方を追加することで、正しく動作することが保証されます。 – Kiliman

関連する問題