2

ProgressBar Value プロパティを ViewModel の readonly プロパティにバインドしています。これは Win 7 ボックスでは問題なく動作しますが、Win XP マシンでは例外がスローされます。

XAML

<ProgressBar Grid.Row="0" Minimum="0.0" Maximum="1.0" Value="{Binding Progress, Mode=TwoWay}" />

例外

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

例外メッセージとWPF バインディングのデフォルト モードの投稿から。解決策は、バインディング モードを OneWay に設定することです。

私の質問は、ProgressBar が値を設定する原因は何ですか? また、XP ではなく Win 7 で動作するのはなぜですか?

4

3 に答える 3

3

双方向バインディングは、ターゲット (ProgressBar.Valueこの場合) がその変更をソース (Progressプロパティ) に反映する必要があることを意味します。ソースが読み取り専用の場合、これはもちろん不可能であるため、例外は理にかなっています。ご指摘のとおり、意味のある唯一のバインディングは、ソースからターゲットへの一方向バインディングです。

なぜWin 7で機能するのかわかりませんが、おそらく「機能する」とは、実際に読み取り専用プロパティを更新するのではなく、サイレントに失敗することを意味します。

于 2013-10-03T22:10:47.410 に答える
2

次のように変更します。

<ProgressBar Grid.Row="0" Minimum="0.0" Maximum="1.0" Value="{Binding Progress, Mode=OneWay}" />

の変更に注意してくださいMode

于 2017-01-16T11:18:36.873 に答える
0

これが古いことは承知していますが、読み取り専用プロパティにバインドする場合は、バインド モードが TwoWay ではなく OneWay であることを指定する必要があります。

于 2015-01-20T13:47:24.110 に答える