Почему выполняется.Двусторонняя привязка текста по умолчанию?

#c# #wpf #binding

#c# #wpf #привязка

Вопрос:

В .NET 4.0 Запустите.Текст можно связать. Итак, я попытался привязать его:

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

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

Мое свойство DisplayText действительно было доступно только для чтения, но так же, как и Run — запуски выполняются в текстовых блоках, которые вы не можете редактировать. Итак, почему я должен получать эту ошибку? Я покопался в 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="{Binding DisplayText, Mode=OneWay}"/>
  

Но почему я должен должен обходить это? Почему по умолчанию выполняется двусторонняя привязка Run?

Комментарии:

1. Отличный вопрос. прошло 6 лет, а новые разработчики все еще сталкиваются с той же проблемой. Я даже сам забываю об этом, пока не нажму на привязку во время выполнения!

Ответ №1:

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

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

Комментарии:

1. Это неверно. В документах говорится, что привязка не включена в RichTextBox, потому что было бы слишком легко очистить привязку с помощью операций редактирования. msdn.microsoft.com/en-us/library /…