2013-02-11 63 views
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属性默认相同的行为)

+0

您确定在第二种情况下为ViewModelProperty触发了PropertyChanged事件吗?新的'ViewModelProperty'可能包含与旧的'ObjectProperty'值相同的值吗?在这种情况下,绑定不会被更新。 – Clemens 2013-02-11 14:24:22

+0

在第二种情况下,肯定是为ViewModelProperty触发了PropertyChanged事件。前后ObjectProperty值具有相同的“浮点数”也是事实。价值,但我仍然期待回调的发生(相当于TextBox.Text的可观察性)。正如你在下面陈述的那样“只要ViewModelProperty有更改通知,绑定就会被更新”。 – Phil 2013-02-11 14:50:09

+0

当ObjectProperty包含相同的float值时,你会如何观察TextBox.Text被更新?最后,PropertyChangedCallback不会被简单地调用,因为属性值没有改变。 – Clemens 2013-02-11 14:56:27

回答

0

您是否尝试过使用Path属性绑定?

<nmspc:CustomControl Value="{Binding Path=ViewModelProperty.ObjectProperty}" /> 

我记得,建立一个双向编程结合的路径属性时是必需的。