自定义依赖属性绑定

问题描述:

我想实现从文本框自定义依赖属性绑定

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进行编辑,并失去焦点

有谁知道原因我该如何解决这个问题?

非常感谢。

您可以通过在numberBox的构造函数设置

b.Mode = BindingMode.OneWay; 

修复它。 通过将TextProperty绑定回源“number”,numberProperty和网格之间的绑定被清除。