Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入wpf数据网格的验证_C#_Wpf_Xaml - Fatal编程技术网

C# 输入wpf数据网格的验证

C# 输入wpf数据网格的验证,c#,wpf,xaml,C#,Wpf,Xaml,我试图验证在WPF中的Datagrid中输入的输入 我已经在XAML中添加了一个验证规则 输入不再是一个对象,而是一个字符串或int。尽管我使用的方法需要一个对象 如何解决该问题并使其与int或string一起工作。输入只能是介于1和20之间的整数 XAML: <DataGridTextColumn Header="Niveau"> <DataGridTextColumn.Binding>

我试图验证在WPF中的Datagrid中输入的输入

我已经在XAML中添加了一个验证规则

输入不再是一个对象,而是一个字符串或int。尽管我使用的方法需要一个对象

如何解决该问题并使其与int或string一起工作。输入只能是介于1和20之间的整数

XAML

<DataGridTextColumn Header="Niveau">                                
    <DataGridTextColumn.Binding>                                                                 
        <Binding Path="Niveau" UpdateSourceTrigger="LostFocus">
            <Binding.ValidationRules>                                       
                <valRule:NiveautredeValidationRule  />                                             
            </Binding.ValidationRules>
        </Binding>                                          
    </DataGridTextColumn.Binding>                                               
</DataGridTextColumn>

C#

public class NiveautredeValidationRule : ValidationRule
{
    public override System.Windows.Controls.ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        NiveaudoelenViewModel doel = (value as BindingGroup).Items[0] as NiveaudoelenViewModel;
        if (doel.Niveau <= 0 || doel.Niveau > 20)
        {
            return new System.Windows.Controls.ValidationResult(false, "Niveau moet tussen de 1 en 20 zijn!");
        }
        else
        {
            return System.Windows.Controls.ValidationResult.ValidResult;
        }
    }
}
公共类NiveautredeValidationRule:ValidationRule
{
公共覆盖System.Windows.Controls.ValidationResult验证(对象值,System.Globalization.CultureInfo CultureInfo)
{
NiveaudoelenViewModel doel=(值为BindingGroup)。项[0]为NiveaudoelenViewModel;
如果(doel.Niveau 20)
{
返回新的System.Windows.Controls.ValidationResult(false,“Niveau moet tussen de 1 en 20 zijn!”);
}
其他的
{
返回System.Windows.Controls.ValidationResult.ValidResult;
}
}
}
您可以尝试以下方法:

public override System.Windows.Controls.ValidationResult Validate(object value, 
    System.Globalization.CultureInfo cultureInfo)
{
    int myInt = 0;

    try
    {
        if (((string)value).Length > 0)
            myInt = int.Parse((String)value);
    }
    catch (Exception e)
    {
        return new ValidationResult(false, "Illegal characters or " + e.Message);
    }

    if (myInt < 0 || myInt > 20)
    {
        return new ValidationResult(false,
          "Please enter a number in the range: 0 - 20");
    }
    else
    {
        return new ValidationResult(true, null);
    }
}
public override System.Windows.Controls.ValidationResult Validate(对象值,
System.Globalization.CultureInfo(文化信息)
{
int-myInt=0;
尝试
{
如果(((字符串)值).Length>0)
myInt=int.Parse((字符串)值);
}
捕获(例外e)
{
返回新的ValidationResult(false,“非法字符”或“+e.Message”);
}
如果(myInt<0 | | myInt>20)
{
返回新的ValidationResult(false,
“请输入一个范围为0-20”的数字;
}
其他的
{
返回新的ValidationResult(true,null);
}
}
来源:

您可以尝试以下方法:

public override System.Windows.Controls.ValidationResult Validate(object value, 
    System.Globalization.CultureInfo cultureInfo)
{
    int myInt = 0;

    try
    {
        if (((string)value).Length > 0)
            myInt = int.Parse((String)value);
    }
    catch (Exception e)
    {
        return new ValidationResult(false, "Illegal characters or " + e.Message);
    }

    if (myInt < 0 || myInt > 20)
    {
        return new ValidationResult(false,
          "Please enter a number in the range: 0 - 20");
    }
    else
    {
        return new ValidationResult(true, null);
    }
}
public override System.Windows.Controls.ValidationResult Validate(对象值,
System.Globalization.CultureInfo(文化信息)
{
int-myInt=0;
尝试
{
如果(((字符串)值).Length>0)
myInt=int.Parse((字符串)值);
}
捕获(例外e)
{
返回新的ValidationResult(false,“非法字符”或“+e.Message”);
}
如果(myInt<0 | | myInt>20)
{
返回新的ValidationResult(false,
“请输入一个范围为0-20”的数字;
}
其他的
{
返回新的ValidationResult(true,null);
}
}

<>源:

你应该考虑更新这个问题的答案, 这消除了
try-catch
并改用

public override System.Windows.Controls.ValidationResult Validate(对象值,
System.Globalization.CultureInfo(文化信息)
{
int-myInt;
if(!int.TryParse(System.Convert.ToString(value),out myInt))
返回新的ValidationResult(false,“非法字符”);
如果(myInt<0 | | myInt>20)
{
返回新的ValidationResult(false,“请输入范围为0-20的数字”);
}
其他的
{
返回新的ValidationResult(true,null);
}
}

> p>你应该考虑更新这个问题的答案, 这消除了
try-catch
并改用

public override System.Windows.Controls.ValidationResult Validate(对象值,
System.Globalization.CultureInfo(文化信息)
{
int-myInt;
if(!int.TryParse(System.Convert.ToString(value),out myInt))
返回新的ValidationResult(false,“非法字符”);
如果(myInt<0 | | myInt>20)
{
返回新的ValidationResult(false,“请输入范围为0-20的数字”);
}
其他的
{
返回新的ValidationResult(true,null);
}
}

谢谢。它不再崩溃了。@ivanfranken很乐意帮忙。:)非常感谢。它不再崩溃了。@ivanfranken很乐意帮忙。:)