2011-05-31 7 views
20

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?

+0

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

Respuesta

9

Sólo una conjetura aquí:

Podría ser porque Run objetos también se utilizan en el control RichTextBox, y puedo imaginar este control que desee enlazar TwoWay por defecto!

+1

Esto es incorrecto. Los documentos dicen que el enlace no está habilitado en RichTextBox porque sería demasiado fácil borrar el enlace con las operaciones de edición. http://msdn.microsoft.com/en-us/library/system.windows.documents.run.text.aspx –

Cuestiones relacionadas