2016-05-30 31 views
0

私のビューモデルにはdecimal?のプロパティがあります。 NULLはこのプロパティの有効な値にする必要がありますが、DecimalUpDownコントロールからテキストを消去すると、検証エラーが発生し、プロパティにNULL値が渡されません(以前の値は残っています)。WPF拡張ツールキットでNULLを許可するDecimalUpDownコントロール

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

私は数に enter image description here

を入力してくださいしかし、すぐに番号が消去されると、検証エラーが発生した場合、それが正常に結合し、値:

制御は次のようにXAMLで宣言されていますNULLに戻すことはできません(この場合、モデルは "ServiceSize"の値として "5"を持っています)。 enter image description here

Validation.GetHasError()このコントロールのためにtrueを返します。検証ルールを完全に削除することはできますか?

+0

(あなたと仮定すると、静的リソースとしてDecimalUpDownValueConverterを追加しました)。 –

+0

@エフライム私はそれを前に試しましたが、コンバータを最初から書き直した後に正しく動作したので、正しく実行しなかったと思います。あなたが答えを追加すると、私はそれを受け入れることができるいくつかのサンプルコード – ryan

答えて

0

空の入力を処理するためにIValueConverterを実装できます。あなたのビューで

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

:あなたは、データバインディングを使用している中で、ケースヌル入力を処理するためにIValueConverterを使用して試すことができます

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize, Converter = { StaticResource DecimalUpDownValueConverter }}" Minimum="0" Grid.Column="4" Grid.Row="2" Margin="5" IsEnabled="{Binding IsEditable}"/> 
関連する問題