Почему Run.Text по умолчанию связывается двусторонне? - PullRequest
22 голосов
/ 31 мая 2011

В .NET 4.0, Run.Text является привязываемым.Поэтому я попытался связать его:

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

Но когда я запустился, я получил ошибку: «Привязка TwoWay или OneWayToSource не может работать с доступным только для чтения свойством« DisplayText »типа« SomeNamespace.SomeClass ». "

Мое свойство DisplayText действительно было доступно только для чтения, но так же как и Run - Run выполняются в 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 связывает по умолчанию с двусторонним связыванием?

1 Ответ

10 голосов
/ 31 мая 2011

Здесь только предположение:

Возможно, это связано с тем, что Run объекты также используются в элементе управления RichTextBox, и я могу представить, что этот элемент управления может захотеть привязать TwoWay по умолчанию!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...