En .NET 4.0, Run.Text es enlazable. Así que traté de obligar a éste:¿Por qué Run.Text se vincula de manera bidireccional por defecto?
<Run Text="{Binding DisplayText}"/>
Pero cuando me encontré, tengo un error: "Un TwoWay o OneWayToSource vinculante no puede trabajar en la propiedad de sólo lectura 'MostrarTexto' del tipo 'SomeNamespace.SomeClass'."
Mi propiedad DisplayText fue de hecho de solo lectura, pero también lo es Run - Runs in TextBlocks, que no puede editar. Entonces, ¿por qué recibiría este error? Cavé en PresentationFramework con dotPeek y bastante seguro:
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)));
La cuarta línea, claro como el día, especifica que debe unirse Run.Text bidireccional por defecto, lo que no tiene sentido y parece que un error de diseño deslumbrante.
Por supuesto, esto es bastante fácil de solucionar:
<Run Text="{Binding DisplayText, Mode=OneWay}"/>
Pero ¿por qué debería tener a trabajar alrededor de ella? ¿Por qué Run se une de dos vías de forma predeterminada?
Gran pregunta. 6 años después y los nuevos desarrolladores aún se encuentran con el mismo problema. Incluso me olvido de eso hasta que toco el enlace en tiempo de ejecución. – josh2112