2
我有一个自定义的WPF usercontrol有一个依赖属性(片段下面)。这不正确地触发它的PropertyChangedCallback。WPF数据绑定与分隔的路径,而不是更新目标
CustomControl:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register(
"Value", typeof(float?), typeof(CustomControl),
new UIPropertyMetadata(new PropertyChangedCallback(OnDependencyPropertyChanged)));
public float? Value
{
get { return (float?)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
private static void OnDependencyPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
// Do something
}
当我绑定属性用一个简单的路径,一切都很好。但是,当我使用分隔的路径语法时,依赖项属性不会在应该更新时更新。
工作结合:
<namespace:CustomControl Value={Binding ViewModelProperty}/>
不工作结合:
<namespace:CustomControl Value={Binding ViewModelProperty.ObjectProperty}/>
与工作语法中,OnDependencyPropertyChanged事件处理程序被调用响应由视图模型解雇ViewModelProperty的PropertyChanged事件。但是,对于第二种语法,仅调用OnDependencyPropertyChanged事件处理程序以更改ObjectProperty,并且不会调用ViewModelProperty的更改。我是否需要执行任何其他设置以使分隔的(。)路径语法适当地工作? (具有与TextBox.Text属性默认相同的行为)
您确定在第二种情况下为ViewModelProperty触发了PropertyChanged事件吗?新的'ViewModelProperty'可能包含与旧的'ObjectProperty'值相同的值吗?在这种情况下,绑定不会被更新。 – Clemens 2013-02-11 14:24:22
在第二种情况下,肯定是为ViewModelProperty触发了PropertyChanged事件。前后ObjectProperty值具有相同的“浮点数”也是事实。价值,但我仍然期待回调的发生(相当于TextBox.Text的可观察性)。正如你在下面陈述的那样“只要ViewModelProperty有更改通知,绑定就会被更新”。 – Phil 2013-02-11 14:50:09
当ObjectProperty包含相同的float值时,你会如何观察TextBox.Text被更新?最后,PropertyChangedCallback不会被简单地调用,因为属性值没有改变。 – Clemens 2013-02-11 14:56:27