2017-05-16 239 views
0

我正在嘗試使用MvvmCross的值轉換器更改iOS標籤的文本顏色。下面的代碼一點點(這是核心項目):Xamarin MvvmCross iOS Bool顏色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示例,但仍無法使其工作。我認爲它與轉換器沒有返回正確的值有關,因爲我放置了斷點並且轉換器已被觸發。有任何想法嗎?

回答

1

首先,如果該件的代碼是在應用中TextColor的唯一引用,則該組件鏈接過程很可能當LinkerBehaviour設置爲Link SDK assemblies onlyLink all assemblies優化掉一些UILabel的屬性。如果這是你的項目的情況下,修復程序是要麼改變LinkerBehaviourDon't link(不理想),或下面的方法添加到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(); 

附: - 只是一個提示:

顏色插件,您可以訪問MvxColorValueConverter,它爲您提供了更簡潔的方式做你的顏色轉換:

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

感謝盧克和感謝編輯。我確實安裝了MvxColors插件。我不太贊同LinkerPleaseInclude方法。我無法在我的項目中找到該類,因此我認爲它必須手動添加。我遵循使用MvxColorValueConverter的方法,但是當應用程序啓動時出現錯誤。我會通過你的建議,並讓你知道它是如何去。 – Ph0b0x

+0

實際上使用MvxColor方法取得了訣竅。我錯過了IOS項目上的Mvx Color Plugin。我在Core項目中擁有它,但不是在IOS項目中。非常感謝盧克。 – Ph0b0x

+0

使用Mvx插件時的一般經驗法則是確保將插件添加到Core和Platform項目中。插件通常具有可移植的界面和特定於平臺的實現,因此添加兩者可確保其正常工作。 – Kiliman