【问题标题】:Custom Dependency Properties and TwoWay binding in WPFWPF 中的自定义依赖属性和双向绑定
【发布时间】:2009-04-29 17:13:06
【问题描述】:

我们有一个派生自 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)。

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

【问题讨论】:

    标签: wpf data-binding dependency-properties


    【解决方案1】:

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

    【讨论】:

    • 天啊,我是个白痴。你是 100% 正确的,值本身设置正确,但是 setter 永远不会被调用,这就是我的想法。谢谢。
    【解决方案2】:

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

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

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

    马克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多