2013-02-11 57 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}" /> 

我記得,建立一個雙向編程結合的路徑屬性時是必需的。