我们有一个派生自DependencyObject的对象,并实现了一些DependencyProperties。

基本上是这样的:

class Context : DependencyObject {
   public static readonly DependencyProperty NameProperty =
   DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata (""));
    public string Name {
        get {
            return (string)this.GetValue (NameProperty);
        }
        set {
            this.SetValue (NameProperty, value);
        }
    }
}

这是有效的,属性设置,可以绑定等。当我使用TwoWay绑定从WPF绑定到属性时出现问题。 TwoWay部分从未实际发生过,WPF从不调用此属性的集合。我已经设置了这样的绑定:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

在这种情况下,键入文本框应立即更新Name属性,但不会。如果我将Name属性更改为常规POCO属性,它可以工作(尽管除非我实现INotifyPropertyChanged,否则TwoWay的另一面显然不会。)

我在这里做错了什么?这应该是一件非常简单的事情,但它让我头疼不已。

有帮助吗?

解决方案

这是预期的行为。 CLR属性只是底层 DependencyProperty 的包装器。 WPF通常通过直接调用 GetValue SetValue 来优化。如果您需要执行自定义逻辑,请使用 DependencyProperty 的元数据。

其他提示

这个问题花了我一些时间后:

对于那些有同样问题的人,但是 - 像我一样 - 在上面的答案中没有看到解决方案:

为了支持DataContext的继承,自定义类(在本例中为Context)必须从 FrameworkElement 而不是 DependencyObject 派生。就是这样。

马克

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top