2011-05-31 142 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

相關問題