在WPF扩展工具包DecimalUpDown控件中允许NULL

时间:2016-05-30 23:27:33

标签: c# wpf wpf-extended-toolkit

我在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}"/>

如果输入数字,它将正确绑定 enter image description here

但是一旦删除了数字,就会发生验证错误,并且该值不能设置回NULL(在这种情况下,模型仍然具有“5”作为“ServiceSize”的值)。 enter image description here

Validation.GetHasError()为此控件返回true。我可以完全以某种方式删除验证规则吗?

1 个答案:

答案 0 :(得分:0)

您可以实现IValueConverter来处理空输入。

#div1 {
    clear: both;
    float: right;
}

#div2 {
    clear: both;
    float: left;
}

在您的视图上:(假设您将DecimalUpDownValueConverter添加为静态资源)

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