在.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默认情况下是双向绑定的?
伟大的问题。 6年后,新的开发者仍然遇到同样的问题。我甚至自己忘了它,直到我在运行时打开绑定为止! – josh2112 2017-02-03 21:35:49