0

カスタム検証ルールにパラメーターを追加しようとしています。このために、次のような依存オブジェクトを定義しました。

public class SettingsValueValidationDependencyObject : DependencyObject
{
    public Custom.ValueType ValueTypeForValidation
    {
        get { return (Custom.ValueType)this.GetValue(ValueTypeForValidationProperty); }
        set { this.SetValue(ValueTypeForValidationProperty, value); }
    }

    public static readonly DependencyProperty ValueTypeForValidationProperty = DependencyProperty.Register("ValueTypeForValidation", typeof(Custom.ValueType), typeof(SettingsValueValidationDependencyObject), new UIPropertyMetadata(Custom.ValueType.Int32Value));
}

私の検証規則クラスは次のようになります。

public class SettingsValueValidationRule : ValidationRule
{
    public SettingsValueValidationDependencyObject SettingsValueValidationDependencyObject
    {
        get;
        set;
    }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        // validation...
    }
}

xaml コード:

<DataGridTextColumn Header="Value" Width="150">
    <DataGridTextColumn.Binding>
        <Binding Path="Value">
            <Binding.ValidationRules>
                <validators:SettingsValueValidationRule>
                    <validators:SettingsValueValidationRule.SettingsValueValidationDependencyObject>
                        <validators:SettingsValueValidationDependencyObject ValueTypeForValidation="{Binding ValueType}"/>
                    </validators:SettingsValueValidationRule.SettingsValueValidationDependencyObject>
                </validators:SettingsValueValidationRule>
            </Binding.ValidationRules>
        </Binding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

Value と ValueType の 2 つのプロパティはどちらも同じオブジェクトに属し、DataGrid の ItemsSource はこれらのオブジェクトのリストにバインドされます。Value セルを編集すると、ValueTypeForValidation プロパティは常にデフォルト値になります (ValueType とその別の値を表示する列もあります)。また、Validate メソッドで BindingExpression を手動で更新しようとしましたが、うまくいきません。私は何を間違っていますか?

4

1 に答える 1

0

ValidationRules にはバインディングはありません。

ValidationRules は LogicalTree の一部ではないため、バインディングでソースとして機能する DataContext はありません。

ただし、ValidationRule を「バインド可能」にする方法はインターネット上にほとんどありません。

このツットを見てください:

非 UIElement でのバインド

于 2013-11-08T12:36:59.440 に答える