#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 /…