1
在其綁定到數據源的ItemsControl
,我想使用自定義的驗證規則,它接受一個參數來驗證TextBox
,以下是該vaildation規則的代碼。自定義驗證規則WPF和項目控制
public class RatioValidation : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (!String.IsNullOrEmpty(Maturity.MaturityValue) && Helper.IsDateInCorrectFormat(Maturity.MaturityValue))
{
String strVal = Convert.ToString(value);
Double ratio = 0;
Boolean isValid = Double.TryParse(strVal, out ratio);
if (isValid)
{
if (ratio <= 0)
return new ValidationResult(false, "Please enter a valid ratio!");
else return new ValidationResult(true, null);
}
return new ValidationResult(false, "Please enter a valid ratio!");
}
else return new ValidationResult(true, null);
}
private MaturityDependencyForValidation _maturity;
public MaturityDependencyForValidation Maturity
{
get { return _maturity; }
set { _maturity = value; }
}
}
public class MaturityDependencyForValidation : DependencyObject
{
public String MaturityValue
{
get { return (String)GetValue(MaturityValueProperty); }
set { SetValue(MaturityValueProperty, value); }
}
public static readonly DependencyProperty MaturityValueProperty =
DependencyProperty.Register("MaturityValue", typeof(String), typeof(MaturityDependencyForValidation), new UIPropertyMetadata(null));
}
,然後用它像下面,
<TextBox Grid.Row="1" Grid.Column="2" Name="txtRatio" BorderThickness="0" Width="148" Tag="{Binding StrMaturity, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Text>
<Binding Path="Ratio" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<leg:RatioValidation ValidatesOnTargetUpdated="True">
<leg:RatioValidation.Maturity>
<leg:MaturityDependencyForValidation MaturityValue="{Binding txtMaturity}"/>
</leg:RatioValidation.Maturity>
</leg:RatioValidation>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
我得到在輸出窗口的異常:
找不到理事FrameworkElement的或FrameworkContentElement上的目標元素。 BindingExpression:路徑= txtMaturity;的DataItem = NULL;目標元素是'MaturityDependencyForValidation'(HashCode = 63478077);目標屬性是「成熟」(類型「字符串」)
而RatioValidation
規則內,的Maturity
值永遠不會被從數據結合結合。我需要這個值來進行數據綁定。請幫忙。
有什麼工作?我想驗證綁定到集合的ItemsControl中的單個(UserControl)項目。 usercontrol爲集合中的每個項目生成一行。它就像一個datagrid場景,我們可以指定rowvalidation屬性並驗證各個行項目。請提出建議嗎? – 2012-02-07 14:08:19
@VinayDwivedi:如何看待鏈接的問題? – 2012-02-07 14:08:43
謝謝你解決我的問題...看着http://stackoverflow.com/questions/8886309/templatebinding-not-working-on-validationrules-dependency-property ...而且它看起來像你的文章...但提供鏈接將有助於...非常感謝。 – 2012-02-10 03:29:09