【发布时间】:2017-08-26 00:42:51
【问题描述】:
目前我有一个网格,我正在尝试创建一个带有验证规则的单元格。为了验证它,我需要行的最小值和最大值。
验证类:
public decimal Max { get; set; }
public decimal Min { get; set; }
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
var test = i < Min;
var test2 = i > Max;
if (test || test2)
return new ValidationResult(false, String.Format("Fee out of range Min: ${0} Max: ${1}", Min, Max));
else
return new ValidationResult(true, null);
}
用户控制:
<telerik:RadGridView SelectedItem ="{Binding SelectedScript}"
ItemsSource="{Binding ScheduleScripts}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn
DataMemberBinding="{Binding Amount}" Header="Amount"
CellTemplate="{StaticResource AmountDataTemplate}"
CellEditTemplate="{StaticResource AmountDataTemplate}"/>
<telerik:GridViewComboBoxColumn
Header="Fee Type"
Style="{StaticResource FeeTypeScriptStyle}"
CellTemplate="{StaticResource FeeTypeTemplate}"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
FeeType 类:
public class FeeType
{
public decimal Min { get; set; }
public decimal Max { get; set; }
public string Name { get; set; }
}
我在这里WPF ValidationRule with dependency property 尝试过这个解决方案,效果很好。但是现在我遇到了代理无法通过视图模型实例化的问题。它基于行的选定组合框值的最小值和最大值属性。
例如,组合框示例值如下
Admin Min: $75 Max $500
Late Min: $0 Max $50
由于网格实际上可以包含任意数量的行,因此我看不出在我的情况下创建代理将如何工作。如果我能得到一些指导提示,将不胜感激。
【问题讨论】:
-
您的代码中只有一个
ComboBox。 -
@AnjumSKhan 假设只有一个 ComboBox。组合框值的类型为 FeeType 类。所以无论选择什么都决定了它的最小值和最大值。
-
您确定这不是XY problem 吗?使用
ValidationRule来完成这项工作需要付出很多努力,而如果您将验证逻辑移至视图模型,这将相当容易完成。 -
@Grx70 我同意使用 ValidationRule 完成这项工作需要付出很多努力,但它改善了用户体验以收到错误/验证失败的通知。
-
@Master 我的意思是,与其实现和使用自定义
ValidationRule,不如将验证逻辑与实现IDataErrorInfo一起放在视图模型中,然后使用DataErrorValidationRule,这将做剩下的工作。对于 .Net 4.5 或更高版本,您也可以改用INotifyDataErrorInfo+NotifyDataErrorValidationRule。
标签: c# wpf telerik-grid validationrule