2

我将 ProgressBar 值属性绑定到我的 ViewModel 的只读属性。这在 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 Binding 默认模式的帖子。解决方案似乎将绑定模式设置为 OneWay。

我的问题是是什么导致 ProgressBar 设置值?为什么它适用于 Win 7 而不是 XP?

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

我知道这很旧,但是如果您要绑定到只读属性,则要指定绑定模式是 OneWay,而不是 TwoWay。

于 2015-01-20T13:47:24.110 回答