在.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