2011-01-21 140 views
7

在我的應用程序之一,我有這樣的代碼: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'. 

通常我會覺得這是某種形式的騙局,但我知道這傢伙沒有關於編碼並使得「模式=單向」明確幫助的想法。在不同的機器上,默認綁定模式有什麼不同?

+0

這聽起來像一個版本問題與框架上是有趣。我不確定默認綁定模式何時更改,但它可能位於其中一個Service Pack(或一個修補程序)中。這些年來似乎有一些奇怪的變化,他們很難追蹤。您定位的是哪個版本? – 2011-01-21 17:33:54

+0

Net Framework 4.0,隨Visual Studio 2010一起安裝。我不能確定,但​​這可能是新的,因爲我的客戶端像兩天前安裝了VS Pro試用版。也許它是與Sp1 .. – kubal5003 2011-01-21 20:07:53

回答

4

Value財產ProgressBar默認綁定TwoWay所以除非你明確地設置ModeOneWay應該發生異常。但是我無法解釋爲什麼它不會在您的機器上出現。我嘗試使用.NET版本4.0,3.5和3.0的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));