我们有一个派生自 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);
}
}
}
这有效,属性已设置,可以绑定(bind)等。当我使用 TwoWay 绑定(bind)从 WPF 绑定(bind)到属性时,问题就出现了。 TwoWay 部分从未真正发生过,WPF 从未调用此属性的集合。我已经像这样设置了我的绑定(bind):
<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
在这种情况下,在文本框中键入应该会立即更新 Name 属性,但事实并非如此。如果我将 Name 属性更改为常规 POCO 属性,它会起作用(尽管 TwoWay 的另一端显然不会,除非我实现 INotifyPropertyChanged)。
我在这里做错了什么?这应该是一件非常简单的事情,但它让我头疼不已。
最佳答案
这是预期的行为。 CLR 属性只是底层 DependencyProperty
的包装。 . WPF 通常通过调用 GetValue
进行优化和 SetValue
直接地。如果您需要执行自定义逻辑,请使用 DependencyProperty
的元数据。 .
关于wpf - WPF 中的自定义依赖属性和双向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803361/