0

タイプ のビュー モデルにプロパティがありますdecimal?。このプロパティの有効な値は NULL である必要がありますが、DecimalUpDown コントロールからテキストを消去すると、検証エラーが発生し、プロパティに値 NULL が与えられません (以前の値が何であれ)。

コントロールは、次のように xaml で宣言されます。

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

数字を入力すると正しくバインドされます ここに画像の説明を入力

しかし、数値が消去されるとすぐに検証エラーが発生し、値を NULL に戻すことはできません (この場合、モデルはまだ "ServiceSize" の値として "5" を持っています)。 ここに画像の説明を入力

Validation.GetHasError() は、このコントロールに対して true を返します。どうにかして検証ルールを完全に削除できますか?

4

1 に答える 1

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

あなたの見解: (DecimalUpDownValueConverter を静的リソースとして追加したと仮定します)

<xctk:DecimalUpDown ValueChanged="UpDownBase_OnValueChanged" Text="{Binding ServiceSize, Converter = { StaticResource DecimalUpDownValueConverter }}" Minimum="0" Grid.Column="4" Grid.Row="2"  Margin="5" IsEnabled="{Binding IsEditable}"/>
于 2016-06-01T00:40:33.653 に答える