为什么Run.Text默认绑定双向?

时间:2011-05-31 15:17:29

标签: c# wpf binding

在.NET 4.0中,Run.Text是可绑定的。所以我试着绑定它:

<Run Text="{Binding DisplayText}"/>

但是当我跑步时,我收到一个错误:“TwoWay或OneWayToSource绑定无法在'SomeNamespace.SomeClass'类型的只读属性'DisplayText'上工作。”

我的DisplayText属性确实是只读的,但Run-Runs也是如此,你无法编辑。那么为什么我会收到这个错误?我用dotPeek挖掘了PresentationFramework,当然可以:

public static readonly DependencyProperty TextProperty =
    DependencyProperty.Register("Text", typeof (string), typeof (Run),
    (PropertyMetadata) new FrameworkPropertyMetadata((object) string.Empty,
        FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
        new PropertyChangedCallback(Run.OnTextPropertyChanged),
        new CoerceValueCallback(Run.CoerceText)));

第四行,简单地说是日期,指定Run.Text默认情况下应该双向绑定,这没有任何意义,看起来像是一个明显的设计错误。

当然,这很容易解决:

<Run Text="{Binding DisplayText, Mode=OneWay}"/>

但为什么我来解决它? 默认情况下为什么Run绑定双向?

1 个答案:

答案 0 :(得分:10)

在这里猜一下:

可能是因为Run控件中也使用了RichTextBox个对象,我可以想象这个控件可能希望默认绑定TwoWay