WPF绑定默认模式

在我的一个应用程序中,我有这样的代码:

<ProgressBar Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Height="27" Margin="5,0,5,0" Maximum="{Binding TabuProgressEnd}" Value="{Binding TabuProgress}" />

虽然我测试了这一切都没问题,但是当我的客户端在VS下打开它并运行此代码时引发了一个异常:

An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll

Additional information: A TwoWay or OneWayToSource binding cannot work on the read-only property 'TabuProgress' of type 'TSPLib.TabuEngine'.

通常我会认为这是一种骗局,但我知道这个人不知道编码,并且让“Mode = OneWay”显式帮助。 在不同的机器上,默认绑定模式有什么不同?


ProgressBarValue属性默认绑定TwoWay ,因此除非您明确将Mode设置为OneWay否则应该发生异常。 但是我无法解释为什么它不会在您的机器上出现。 我尝试使用.NET版本4.0,3.5和3.0的Reflector,据我所知,默认绑定模式在一段时间内没有改变。

如果安装了Reflector,那么看看ValueProperty(从RangeBase继承)在你的机器上的外观会很有趣

public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register(
        "Value",
        typeof(double),
        typeof(RangeBase),
        new FrameworkPropertyMetadata(
            0.0,
            FrameworkPropertyMetadataOptions.Journal | 
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
            new PropertyChangedCallback(RangeBase.OnValueChanged),
            new CoerceValueCallback(RangeBase.ConstrainToRange)),
        new ValidateValueCallback(RangeBase.IsValidDoubleValue));
链接地址: http://www.djcxy.com/p/50089.html

上一篇: WPF Binding default mode

下一篇: Attach image in Native SMS/MMS Application on iPhone