【问题标题】:Dependency Property not updating依赖属性不更新
【发布时间】:2013-11-08 09:33:04
【问题描述】:

我正在尝试将参数添加到我的自定义验证规则中。为此,我定义了一个这样的依赖对象:

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...
    }
}

xml 代码:

<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 这两个属性都属于同一个对象,DataGrid 的 ItemsSource 绑定到这些对象的列表。当我编辑 Value 单元格时,ValueTypeForValidation 属性始终是默认值(我还有一列来显示 ValueType 及其肯定是另一个值)。我还尝试在 Validate 方法中手动更新 BindingExpression,但它不起作用。我做错了什么?

【问题讨论】:

  • 或许您可以告诉我们这个自定义验证规则应该做什么?
  • 它应该验证用户在数据网格单元格中输入的值。对于此验证,它需要绑定到单元格的对象的 ValueType 而不仅仅是用户输入的纯文本。
  • 你确定可以从数据值中算出类型吗?这一切对我来说似乎有点不必要,尽管也许我误解了一些东西。

标签: c# wpf binding dependency-properties updating


【解决方案1】:

ValidationRules 中没有绑定。

ValidationRules 不是 LogicalTree 的一部分,因此在您的 Binding 中没有可用作 Source 的 DataContext。

然而,互联网上关于如何使 ValidationRule “可绑定”的技巧很少。

看看这个图:

Binding on a Non-UIElement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多