在WPF中,如何更新我的自定义属性绑定的对象?
我有一个完美的自定义属性,除非它绑定到一个对象。在WPF中,如何更新我的自定义属性绑定的对象?
的原因是,一旦下面的代码被执行:
base.SetValue(ValueProperty, value);
...然后我的控制不再约束。我知道这是因为呼吁:
base.GetBindingExpression(ValueProperty);
...完全返回绑定对象 - UNTIL我打电话base.SetValue。所以我的问题是,我如何将新的“值”传递给我所绑定的对象?
编辑:下面的代码...
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(decimal?), typeof(NumericTextBox));
public decimal? Value
{
get
{
return (decimal?)base.GetValue(ValueProperty);
}
set
{
base.SetValue(ValueProperty, value);
}
}
正如你所看到的,这很简单,样板, “微软示例” 的代码。
编辑2:下面是绑定代码...
// Apparently, not showing this line of code here has some people confused...
this.DataContext = new SomeClassWithAPropertyCalledNumericValue();
<my:NumericTextBox Value="{Binding NumericValue}" />
再次...简单。
我觉得
base.SetCurrentValue(ValueProperty, value);
是你在找什么
摘要:
设置依赖项属性的值而不更改其值源。
令人惊叹! - 我已经改变了我的答案,而不是我自己的答案......我将尽快删除我从项目中制作的扩展方法。再次感谢! – 2011-01-16 03:12:33
我想你需要发布更多的代码。你绑定到XAML中的“NumericValue”,我没有在你的C#代码中看到。
尽管如此,如果您的绑定事实上是正确的,您可能需要移除文本框才能看到更改(假设您没有以此方式进行测试),或者使绑定显示像这样改变属性更改:
{Binding NumericValue, UpdateSourceTrigger=PropertyChanged}
您绑定到NumericValue,但您不显示我们NumericValue。纯粹基于上面的代码,你的结合应该是沿着线的东西:
<my:NumericTextBox Text="{Binding Value}" />
如果你真的是意为结合“价值”到“NumericValue”,那么你将不得不向我们展示的DependencyProperty为NumericValue。
NumericTextBox是我自己的自定义类......它没有“文本”属性,它有一个“值”属性。我将自定义类的“Value”属性绑定到一个名为NumericValue的小数,它是附加的datacontext的一部分。 – 2010-04-14 19:18:03
并且是NumericValue一个DependencyProperty? – McAden 2010-04-15 04:00:26
我已经找到了答案,而事实上,没有其他人说,这只是表明,极少数人正在自己的自定义控件...
1)如果你只需要调用“base.SetValue “,你将销毁应用到你的自定义属性的任何绑定 - 就这么简单。
2),你必须做的是,确定是否绑定如果是这样,更新目标自己手动(真的微软)? - 如果你没有绑定,那么你可以打电话的基础。设定值。
这里的辅助方法,我不得不做出:
private void SetValueOrBinding(decimal? value)
{
var bindingExpression = this.GetBindingExpression(ValueProperty);
if (bindingExpression == null)
{
base.SetValue(ValueProperty, value);
}
else
{
var target = bindingExpression.DataItem;
var propertyInfo = target.GetType().GetProperty(bindingExpression.ParentBinding.Path.Path);
propertyInfo.SetValue(target, value, null);
}
}
你能说扩展方法的人?
您能告诉我们(a)您的自定义属性和(b)绑定的代码吗? – Heinzi 2010-04-14 17:12:38
当然...现在加入它。 – 2010-04-14 17:17:21
答案就像做TwoWay绑定和实现属性更改通知一样简单吗? – Ragepotato 2010-04-14 17:25:17