自定义依赖属性绑定
问题描述:
我想实现从文本框自定义依赖属性绑定
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和网格之间的绑定被清除。