2014-10-08 137 views
0

我想實現從文本框自定義依賴屬性綁定

public class numberBox : TextBox 

繼承了numberBox類,我宣佈一個自定義的DependencyProperty numberProperty

public static readonly DependencyProperty numberProperty = DependencyProperty.Register("number", typeof(object), typeof(numberBox), new PropertyMetadata(0)); 
    public object number 
    { 
     get { return GetValue(numberProperty); } 
     set { SetValue(numberProperty, value); } 
    } 

在numberBox的構造函數中,我有一個綁定同步文本和數字

public numberBox() 
    { 
     Binding b = new Binding("number");    
     b.Source = this; 
     this.SetBinding(TextProperty, b); 
    } 

在一種情況下,當我使用numberBo X像這樣

<BC:numberBox x:Name="numC1" number={Binding ElementName=dg, Path=SelectedItem.C1} /> 

「DG」是一個DataGrid,我的目標是當數據網格的選擇改變,numberBox顯示所選項目的價值

PS我知道我可以使用DataGrid.SelectionChanged事件實現相同的行爲,但我只想了解更多關於綁定

一切工作正常,至今,當我選擇不同的DataGrid行,數字框顯示正確的值,但是,當數字框得到焦點,被編輯後,失去焦點,numberProperty綁定消失了,這意味着當DataGrid選擇的項目改變時,它不會'牛逼帶來的價值爲numberBox了

我設置一個斷點,並檢查「this.GetBindingExpression(numberProperty)」在numberBox,它返回null在此之後numberBox進行編輯,並失去焦點

有誰知道原因我該如何解決這個問題?

非常感謝。

回答

0

您可以通過在numberBox的構造函數設置

b.Mode = BindingMode.OneWay; 

修復它。 通過將TextProperty綁定回源「number」,numberProperty和網格之間的綁定被清除。