2011-05-31 92 views
20

在.NET 4.0中,Run.Text是可绑定的。所以,我试图将其绑定:为什么Run.Text在默认情况下是双向绑定的?

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

但是,当我跑了,我得到了一个错误:“一双向或OneWayToSource结合不能只读属性类型的“DisplayText‘SomeNamespace.SomeClass’工作。”

我的DisplayText属性的确是只读的,但运行也是如此 - 运行在TextBlocks中,您无法编辑。那么,为什么我会得到这个错误?我挖成PresentationFramework与dotPeek果然:

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默认情况下是双向绑定的?

+0

伟大的问题。 6年后,新的开发者仍然遇到同样的问题。我甚至自己忘了它,直到我在运行时打开绑定为止! – josh2112 2017-02-03 21:35:49

回答

9

只是一个猜测这里:

这可能是因为Run对象也在RichTextBox控制使用,我可以想像这个控制可能要绑定默认TwoWay

+1

这是不正确的。文档说,在RichTextBox中未启用绑定,因为使用编辑操作清除绑定太容易了。 http://msdn.microsoft.com/en-us/library/system.windows.documents.run.text.aspx – 2013-07-10 06:25:07

相关问题