[英]Validation rules for entries of a particular row in a WPF DataGrid
我有一个带有2列(Column1和Column2)和2行的DataGrid(MyDgr)。 我可以按列设置DataGrid的验证规则。 例如:对于Column1,所有条目都必须为正,对于Column2,所有条目都必须为<5。
但是,我也希望能够为每行设置不同的验证规则。 例如,第一行中的条目只能是整数,而第二行中的条目则可以是双精度型。
我设置“列验证规则”的方式为2列创建了2个类
public class Column1ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value != null)
{
double proposedValue;
if (!double.TryParse(value.ToString(), out proposedValue))
{
return new ValidationResult(false, "'" + value.ToString() + "' is not a real number.");
}
if (proposedValue <= 0)
{
return new ValidationResult(false, "value must be positive.");
}
}
return new ValidationResult(true, null);
}
}
public class Column2ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value != null)
{
double proposedValue;
if (!double.TryParse(value.ToString(), out proposedValue))
{
return new ValidationResult(false, "'" + value.ToString() + "' is not a real number.");
}
if (proposedValue >= 5)
{
return new ValidationResult(false, "value must be less than 5.");
}
}
return new ValidationResult(true, null);
}
}
在XAML中,我将每个列与其对应的ValidationRule绑定在一起。 那部分工作正常。
<DataGrid x:Name="MyDgr" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Column1">
<DataGridTextColumn.Binding>
<Binding Path="Col1" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<data:Column1ValidationRule />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Column2">
<DataGridTextColumn.Binding>
<Binding Path="Col2" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<data:Column2ValidationRule />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
对于DataGrid DataContext,我创建了一个类:
public class Mydata
{
public string Col1 { get; set; }
public string Col2 { get; set; }
}
对于我的DataGrid MyDgr的2行,我创建2个Mydata对象的新实例,并将它们添加到一个可观察的集合中:
var row1 = new Mydata();
var row2 = new Mydata();
ObservableCollection<MyData> dataColl = new ObservableCollection<MyData>();
dataColl.Add(row1);
dataColl.Add(row2);
myDgr.DataContext = dataColl;
但是,我不知道如何使数据网格中的两行具有其他不同的验证规则(第一行中的条目只能是整数,而第二行中的条目允许为双精度,或者实际上,我想按行设置其他任何验证规则)。 任何帮助深表感谢!
您可以执行行级验证,如下所示:
<DataGrid.RowValidationRules>
<local:CourseValidationRule ValidationStep="UpdatedValue"/>
</DataGrid.RowValidationRules>
可以在这里找到有关它的详细说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.