时间:2010-07-24 01:36:11

标签: c# wpf xaml data-binding dependency-properties

3 个答案:

答案 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)