【问题标题】:Allow NULL in a WPF Extended Toolkit DecimalUpDown control在 WPF 扩展工具包 DecimalUpDown 控件中允许 NULL
【发布时间】:2016-05-30 23:27:32
【问题描述】:

我的视图模型上有一个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() 为该控件返回 true。我可以以某种方式完全删除验证规则吗?

【问题讨论】:

  • 您可以尝试使用 IValueConverter 来处理空输入,以防您使用数据绑定。
  • @Ephraim 我之前尝试过,但我想我没有正确执行它,因为我在从头开始重写转换器后让它工作。如果您添加一些示例代码的答案,我可以接受它

标签: c# wpf wpf-extended-toolkit


【解决方案1】:

您可以实现 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}"/>

【讨论】:

  • 如果您想将空输入解析为 null,请在 ConvertBack 中使用 return string.IsNullOrEmpty((string)value) ? null : value;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多