データソースにバインドされている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:Path = txtMaturity; DataItem = null;ターゲット要素は 'MaturityDependencyForValidation'(HashCode = 63478077)です。プロパティが「成熟」(タイプ「文字列」)
され、RatioValidation
ルール内、Maturity
の値は、データバインディングからバインドされることは決してありませんターゲットにしています。データバインディングにはこの値が必要です。助けてください。
回避策はありますか?コレクションにバインドされているItemsControlの個々の(UserControl)アイテムを検証する必要があります。ユーザーコントロールは、コレクション内の各アイテムに対して1つの行を生成します。 RowValidationプロパティを指定して個々の行アイテムを検証できるDataGridシナリオのようなものです。何か提案してください? –
@VinayDwivedi:リンクされた質問を見るのはどうですか? –
私の問題を解決していただきありがとうございます... http://stackoverflow.com/questions/8886309/templatebinding-not-working-on-validationrules-dependency-propertyを見てください...また、あなたの記事のように見えます...リンクを提供することは助けになりました...どうもありがとうございました。 –