2011-01-21 22 views
7

en una de mis aplicaciones Tengo un código como el siguiente:WPF Encuadernación modo por defecto

<ProgressBar Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Height="27" Margin="5,0,5,0" Maximum="{Binding TabuProgressEnd}" Value="{Binding TabuProgress}" /> 

Mientras estaba probando esta todo está bien, pero cuando mi cliente abre esto bajo VS y ejecutar el código inició una excepción :

An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll 

Additional information: A TwoWay or OneWayToSource binding cannot work on the read-only property 'TabuProgress' of type 'TSPLib.TabuEngine'. 

Por lo general, yo creo que esto es una especie de broma, pero sé que el hombre no tiene ni idea acerca de la codificación y hacer que el "Modo = OneWay" explícito ayudó. ¿Cómo es posible que el modo de enlace predeterminado sea diferente en diferentes máquinas?

+0

Esto suena como un problema de versión con el marco. No estoy seguro de cuándo cambió el modo de enlace predeterminado, pero podría haber estado en uno de los paquetes de servicio (o una revisión). Parece haber habido algunos de estos cambios extraños en los últimos años, y son difíciles de seguir. ¿A qué versión estás apuntando? –

+0

Net Framework 4.0, instalado con Visual Studio 2010. No estoy seguro, pero puede ser algo nuevo, porque mi cliente instaló la versión de prueba de VS Pro hace dos días. Tal vez es con Sp1 .. – kubal5003

Respuesta

4

La propiedad Value en ProgressBar une TwoWay de forma predeterminada para la excepción debe ocurrir a menos que se establezca explícitamente a ModeOneWay. Sin embargo, no puedo explicar por qué no ocurre en su máquina. Intenté usar Reflector con .NET versiones 4.0, 3.5 y 3.0 y, por lo que puedo ver, el modo de enlace predeterminado no ha cambiado en un tiempo.

Si ha instalado reflector, sería interesante ver lo que el ValueProperty (heredado de RangeBase) se parece en su máquina

public static readonly DependencyProperty ValueProperty = 
    DependencyProperty.Register(
     "Value", 
     typeof(double), 
     typeof(RangeBase), 
     new FrameworkPropertyMetadata(
      0.0, 
      FrameworkPropertyMetadataOptions.Journal | 
      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
      new PropertyChangedCallback(RangeBase.OnValueChanged), 
      new CoerceValueCallback(RangeBase.ConstrainToRange)), 
     new ValidateValueCallback(RangeBase.IsValidDoubleValue)); 
+0

Gracias por su respuesta. En primer lugar, he aprendido que el modo de enlace predeterminado se puede establecer en los metadatos de DP. Definitivamente tendré más cuidado con eso en el futuro. Revisé el código anterior en mi framework y también incluyó BindsTwoWayByDefault. Esto es extraño.. – kubal5003

Cuestiones relacionadas