在 WPF 扩展工具包 DecimalUpDown 控件中允许 NULL
Allow NULL in a WPF Extended Toolkit DecimalUpDown control
我的视图模型 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(在这种情况下模型仍然有“5”作为 "ServiceSize" 的值) .
Validation.GetHasError() returns 此控件为真。我能以某种方式完全删除验证规则吗?
您可以实现 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}"/>
我的视图模型 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(在这种情况下模型仍然有“5”作为 "ServiceSize" 的值) .
Validation.GetHasError() returns 此控件为真。我能以某种方式完全删除验证规则吗?
您可以实现 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}"/>