1

我有一个数据网格,其中我有一个非整数类型的数量字段。现在我想限制我的用户只输入正整数。我不想要处理数据网格键事件输入的解决方案。有什么建议么?

这是我正在使用的转换器

public class ValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        { return value; }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (!OnlyPositiveIntergerAllowed(value.ToString()))
            {
                string s = Regex.Replace(value.ToString(), @"[^0-9]+", string.Empty);

                if(s=="")
                return 0;
                else
                    return s;

            }
           if (value is string && (string)value == "")
            {
                return 0;
            }

            return value;

        }
        private static bool OnlyPositiveIntergerAllowed(string text)
        {
            var regex = new Regex("[^0-9]+"); //regex that matches disallowed text
            return !regex.IsMatch(text);
        }
}

注意:它工作正常(即如果 123dasd。它在失去焦点 123 上转换),但我允许用户输入(dasd。)。

4

2 回答 2

0

您寻求的解决方案称为验证。

搜索WPF 验证将提供大量链接,这是一个看起来不错的链接:http ://wpftutorial.net/DataValidation.html

于 2012-11-17T10:31:26.280 回答
0

对于这种情况,DataGridTemplateColumn您可以使用IntegerUpDown扩展WPF 工具包。

例子:

            <DataGridTemplateColumn Header="Amount">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <toolkit:IntegerUpDown 
                                    Minimum="0"
                                    Value="{Binding Amount}"
                            />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

您也可以使用DecimalUpDown

于 2012-11-16T16:45:47.820 回答