【发布时间】:2017-06-22 21:15:36
【问题描述】:
我有一个包含 2 列(Column1 和 Column2)和 2 行的 DataGrid (MyDgr)。我可以按列为我的 DataGrid 设置验证规则。 例如:对于 Column1,所有条目必须是正数,对于 Column2,所有条目必须是
但是,我还希望能够为每一行设置不同的验证规则。 例如,第一行的条目只能是整数,而第二行的条目可以是双精度数。
我设置“列验证规则”的方式,我为 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; }
}
对于我的 2 行 DataGrid MyDgr,我创建了 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 中的两行具有那些额外的不同验证规则(第一行中的条目只能是整数,而第二行中的条目可以是双打,或者我想由 Row 设置的任何其他验证规则)。 非常感谢任何帮助!
【问题讨论】: