2016-04-22 13 views
0

Ich habe die folgenden NullableConverter Klasse. Wenn ich jedoch meine Anwendung ausführe, zeigt es nichts in der TextView, wie ich 0 zeigen könnte, wenn der Wert null ist? Ist es möglich, es in der zu tun?Zeige einen Wert im Falle von NULL in MVVMCross

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

und in meiner Ansicht:

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

Antwort

5

Option 1: FallbackValue

können Sie FallbackValue für diese.

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

zum Spec In Bezug auf sie nur zurück fällt, wenn der kein Wert ist (null ist ein Wert). So müssen Sie Sie-Konverter ändern zu:

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; 
    } 
    // ... 
} 

Option 2: einfache Rückkehr in Convert

Oder Sie können einfach 0 zurückkehren, anstatt eine Ausnahme zu werfen, und dann verwenden Sie nicht 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; 
    } 
    // ... 
} 

Aber dieser Konverter ist dann nicht mehr so ​​generisch.

Option 3: Converter

Die dritte Option ist die Rückfall über die 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; 
    } 
    // ... 
} 

Und binden wie dies passieren:

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

Aber dann sollten Sie das geben Konverter einen aussagekräftigeren Namen wie NullableWithFallbackValaueConverter oder was auch immer.

Exkurs

Try MvxValueConverter<TFrom, TTo> wenn möglich zu verwenden. Sie müssen also nicht Convert und ConvertBack einwerfen. Für diesen speziellen Konverter würde es nicht viel Sinn machen. Aber nur für den Fall, dass Sie es nicht wussten.

Exkurs # 2

Ich kann mir vorstellen, dass dieser Ansatz wird von einigen Jungs kritisiert werden, da der Nachteil dieses Ansatzes ist, dass der angezeigte Wert auf den Daten hängt in Ihrer Ansicht verbindlich. Und das müssen Sie mehrmals schreiben (z. B. in iOS und Android). Einen Fallback-Wert zu setzen, wenn der tatsächliche Wert null ist, ist ein Anliegen des ViewModels.

Verwandte Themen