2016-04-22 9 views
0

私は以下のNullableConverterクラスを持っています。しかし、アプリケーションを実行すると、TextViewに何も表示されません。値がnullの場合、どのように表示することができましたか?それはaxmlで可能ですか?MVVMCrossでNULLの場合の値を表示

public class NullableValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 

    public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null || string.IsNullOrEmpty(value.ToString())) 
     { 
      return null; 
     } 

     return value; 
    } 
} 

と私の見解内側:

local:MvxBind="Text Age,Converter=Nullable;" 

答えて

5

はオプション1:FallbackValue

あなたはこのためにFallbackValueを使用することができます。 Specにについて

local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';" 

は値が(ヌル値である)が存在しない場合、それはちょうど、フォールバックありません。

public class NullableValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (string.IsNullOrEmpty(value?.ToString())) 
     { 
      throw new ArgumentNullException(nameof(value)); 
     } 
     return value; 
    } 
    // ... 
} 

オプション2::だから、あなたはにあなたのコンバータを変更する必要が

それとも、単に例外をスローするのではなく、0を返すことができます変換でシンプルなリターンをしてから使用していないFallbackValue

public class NullableValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (string.IsNullOrEmpty(value?.ToString())) 
     { 
      return "0"; 
     } 
     return value; 
    } 
    // ... 
} 

しかし、このコンバータはそれほど一般的ではありません。

オプション3:ConverterParameterは

第三の選択肢はConverterParameter

public class NullableValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (string.IsNullOrEmpty(value?.ToString())) 
     { 
      return parameter; 
     } 
     return value; 
    } 
    // ... 
} 

経由でフォールバックを渡すと、このように結合することである。

local:MvxBind="Text Age, Converter=Nullable, ConverterParameter='0';" 

をしかし、その後、あなたは与える必要がありますより具体的な名前はNullableWithFallbackValaueConverterなどです。

サイドノート

可能であればMvxValueConverter<TFrom, TTo>を使用してみてください。だから、ConvertConvertBackの中にキャストする必要はありません。この特定のコンバーターのためにそれほど意味をなさないでしょう。しかし、あなたが知らなかった場合に備えて。

サイドノート#2

私が示した値は、あなたのビューでデータバインディングに依存していることを、このアプローチの欠点があるため、このアプローチは、いくつかの男によって批判されることを想像することができます。これは複数回書き込む必要があります(iOSやAndroidなど)。実際の値がnullの場合はフォールバック値を設定する方がViewModelの関心事です。

関連する問題