2011-01-21 4 views
7

バインディング:私はこのすべてがOKでテストしていたが、私のクライアントは、VSの下にこれを開いたときにWPFは、私はこのようなコードを持って、私のアプリケーションの一つにデフォルトモード

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

と、このコードを実行するには、例外がスローされました:

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'. 

通常私は、これはデマのいくつかの種類だと思うだろうが、私は、男は、明示的な「モード=一方向」を助けたコーディングとすることについては考えていないことを知っています。どのようにデフォルトのバインディングモードが異なるマシンで異なる可能性がありますか?あなたが明示的にOneWayModeを設定しない限り、例外が発生しなければならないので、ProgressBar

+0

これは、フレームワークとのバージョンの問題のような音にどのように見えるかを確認するために興味深いものになるだろう。既定のバインドモードが変更されたときはわかりませんが、サービスパック(または修正プログラム)のいずれかにあった可能性があります。何年もの間、これらの変わった変化がいくつか起きているように見えますが、追跡が難しいです。あなたはどのバージョンをターゲットにしていますか? –

+0

Visual Studio 2010と共にインストールされたNet Framework 4.0。確かにわかりませんが、2日前のようにクライアントがVS Pro試用版をインストールしたため、新しいことかもしれません。たぶんそれはSp1とだ。 – kubal5003

答えて

4

Valueプロパティは、デフォルトではTwoWayをバインドします。しかし、私はあなたのマシンでそれが発生しない理由を説明することはできません。 Reflectorを.NETバージョン4.0,3.5、および3.0で使用しようとしましたが、私が知る限り、デフォルトのバインディングモードはしばらく変更されていません。あなたはリフレクターがインストールされている場合

、(RangeBaseから継承)ValuePropertyがマシン

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)); 
+0

あなたの答えをありがとう。まず最初に、デフォルトのバインディングモードをDPメタデータに設定できることを学びました。私は私のフレームワーク上で上記のコードをチェックし、BindsTwoWayByDefaultも含んでいます。これはおかしい.. – kubal5003

関連する問題