2016-05-30 7 views
0

Ich habe eine Eigenschaft in meinem Ansichtsmodell des Typs decimal?. NULL sollte ein gültiger Wert für diese Eigenschaft sein, aber wenn ich den Text aus dem DecimalUpDown-Steuerelement lösche, tritt ein Validierungsfehler auf und die Eigenschaft erhält nicht den Wert NULL (was auch immer es vorher war).Erlaube NULL in einem WPF Extended Toolkit DecimalUpDown-Steuerelement

Die Steuerung wird in XAML wie erklärt:

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize}" Minimum="0" Grid.Column="4" Grid.Row="2" Margin="5" IsEnabled="{Binding IsEditable}"/> 

Es wird richtig binden, wenn ich eine Zahl enter image description here

Aber sobald die Zahl gelöscht wird ein Validierungsfehler auftritt, und den Wert eingeben kann nicht auf NULL zurückgesetzt werden (in diesem Fall hat das Modell immer noch "5" als Wert für "ServiceSize"). enter image description here

Validation.GetHasError() gibt true für dieses Steuerelement zurück. Kann ich die Validierungsregeln vollständig entfernen?

+0

Sie versuchen IValueConverter verwenden, können null Eingang zu handhaben im Fall, dass Sie Daten verwenden, verbindlich. –

+0

@Ephraim Ich habe das vorher versucht, aber ich denke, ich habe es nicht richtig gemacht, da ich es nach dem Umschreiben des Konverters von Grund auf funktionierte. Wenn Sie eine Antwort ein Beispielcode hinzufügen, kann ich es akzeptieren – ryan

Antwort

0

Sie können einen IValueConverter implementieren, um leere Eingaben zu verarbeiten.

public class DecimalUpDownValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // handle input on a case-to-case basis 
     if(value == null) 
     { 
      // Do something 
      return 0; 
     } 
     else 
     { 
      return value; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // Do the conversion from model property to DecimalUpDownValue 
     return value; 
    } 
} 

Auf Ihrer Ansicht: (Sie Unter der Annahme, hinzugefügt, um die DecimalUpDownValueConverter als statische Ressource)

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize, Converter = { StaticResource DecimalUpDownValueConverter }}" Minimum="0" Grid.Column="4" Grid.Row="2" Margin="5" IsEnabled="{Binding IsEditable}"/> 
Verwandte Themen