В .NET 4.0 Run.Text является связующим. Поэтому я попытался связать его:
<Run Text="{Binding DisplayText}"/>
Но когда я запустил, у меня получилась ошибка: "Связывание TwoWay или OneWayToSource не может работать в качестве свойства" только для чтения "DisplayText" типа "SomeNamespace.SomeClass".
Свойство DisplayText действительно было только для чтения, но так же, как и Run-Runs, в 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 по умолчанию работает по умолчанию?