7

我们有一个派生自 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 属性,它会起作用(尽管 TwoWay 的另一端显然不会,除非我实现 INotifyPropertyChanged)。

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

4

2 回答 2

11

这是预期的行为。CLR 属性只是底层DependencyProperty. WPF 通常通过调用GetValueSetValue直接进行优化。如果您需要执行自定义逻辑,请使用DependencyProperty.

于 2009-04-29T17:29:38.687 回答
2

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

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

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

马克

于 2011-06-29T08:00:55.840 回答