答案 0 :(得分:12)
答案 1 :(得分:5)
旧问题的新答案: - )
在ValueProperty
的注册中使用FrameworkPropertyMetadata
实例。将此实例的UpdateSourceTrigger
属性设置为Explicit
。这可以在构造函数重载中完成。
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
new FrameworkPropertyMetadata(
0,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal,
HandleValueChanged,
HandleCoerceValue,
false
UpdateSourceTrigger.Explicit));
现在ValueProperty
的绑定来源不会在PropertyChanged
自动更新。
在HandleValueChanged
方法中手动执行更新(请参阅上面的代码)。
只有在调用了强制方法后,才会对属性的“实际”更改调用此方法。
你可以这样做:
static void HandleValueChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
NumericUpDown nud = obj as NumericUpDown;
if (nud == null)
return;
BindingExpression be = nud.GetBindingExpression(NumericUpDown.ValueProperty);
if(be != null)
be.UpdateSource();
}
通过这种方式,您可以避免使用DependencyProperty的非强制值更新绑定。
答案 2 :(得分:-1)