【问题标题】:ProgressBar Value Binding to ReadOnly propertyProgressBar 值绑定到 ReadOnly 属性
【发布时间】:2013-10-03 22:07:29
【问题描述】:

我将 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 default mode 帖子。解决办法好像是把绑定模式设置为OneWay。

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

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    双向绑定意味着目标(本例中为ProgressBar.Value)应将其更改传播回源(Progress 属性)。如果源是只读的,这当然是不可能的,所以例外是有道理的。正如您所指出的,唯一有意义的绑定是源到目标绑定的单向方式。

    我不知道为什么它会在 Win 7 上运行 - 虽然大概“工作”只是意味着它会静默失败,而不是实际更新只读属性。

    【讨论】:

    • ProgressBar 值仅通过源 (ViewModel) 属性更改的更改而更改。由于任何用户交互,ProgressBar 没有变化。因此我想知道,为什么要更新 ProgressBar 源。
    • @Bhavesh 你怎么知道它正在更新?大概它不是,但是有某种运行时检查会引发异常,因为双向绑定(原则上)是无效的。
    【解决方案2】:

    改成:

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

    注意Mode的变化。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 2017-08-27
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        • 2017-08-08
        • 2010-11-26
        相关资源
        最近更新 更多