我将ProgressBar Value Propetry绑定到我的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 Binding default mode帖子。解决方案似乎是将绑定模式设置为OneWay。
我的问题是导致ProgressBar设置值的原因是什么?为什么它适用于Win 7而不适用于XP?
答案 0 :(得分:3)
双向绑定意味着目标(在这种情况下为ProgressBar.Value
)应将其更改传播回源(Progress
属性)。如果源是只读的,这当然是不可能的,所以异常是有道理的。正如您所指出的,唯一有意义的绑定是单向源到目标绑定。
我不知道它为什么会在Win 7上运行 - 尽管可能“工作”只是意味着它无声地失败,而不是实际更新只读属性。
答案 1 :(得分:2)
将其更改为:
<ProgressBar Grid.Row="0" Minimum="0.0" Maximum="1.0" Value="{Binding Progress, Mode=OneWay}" />
请注意Mode
。
答案 2 :(得分:0)
我知道这是旧的,但如果你绑定到只读属性,你想指定绑定模式是OneWay,而不是TwoWay。