OneWayToSource
La unión parece roto en .NET 4.0OneWayToSource La unión parece roto en .NET 4.0
que tienen este simple trozo de Xaml
<StackPanel>
<TextBox Text="{Binding TextProperty, Mode=OneWayToSource}"/>
<Button/>
</StackPanel>
Y mi código detrás se ve así
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private string m_textProperty;
public string TextProperty
{
get
{
return "Should not be used in OneWayToSource Binding";
}
set
{
m_textProperty = value;
}
}
En .NET 3.5 esto funciona como es posible excepto. Ponga un poco de texto en el TextBox
, pulse la tecla Tab para hacer que perder el foco, y los TextProperty
actualizaciones con cualquier texto que se ha introducido en el TextBox
En .NET 4.0, si escribo un texto en el TextBox
y pulse Pestaña para hacer que pierda el Enfoque, el TextBox
revierte al valor de TextProperty
(es decir, "No se debe usar en el enlace OneWayToSource"). ¿Es esta relectura prevista para un enlace OneWayToSource
en .NET 4.0? Solo quiero que el TextBox
presione su valor en el TextProperty
y no al revés.
actualización
Adición de una generosidad a esta pregunta, ya que se ha convertido en un inconveniente alcalde en mi proyecto y me gustaría saber la razón de que esto ha cambiado. Parece que se llama al get
después de que el Enlace haya actualizado la fuente. ¿Es este el comportamiento deseado para un enlace OneWayToSource
en .NET 4.0?
En caso afirmativo
- ¿Cuál fue el problema con la forma en que trabajó en 3.5?
- ¿En qué escenarios es mejor este nuevo comportamiento?
O está presente, de hecho, un error que podemos tener la esperanza de ser arreglados en una versión futura?
Gracias por su respuesta y el convertidor pero no estoy de acuerdo. Su respuesta y el blog de Karl Shifflett explican por qué esta característica se agregó para cada modo, excepto 'OneWayToSource'. Digamos que hago alguna conversión, formato o lo que sea en el setter, aún así no quiero que mi 'TextBox' se actualice a ese valor. No solo rompieron la forma en que funcionaba antes (de lo que nunca escuché a nadie quejarse), ahora también es un error porque ya no es 'OneWayToSource'. Está en un punto intermedio como 'TwoWay' sin actualizar la notificación de cambio –
No mencioné que el nuevo comportamiento de' OneWayToSource' me resulta sorprendente e inútil. No quise parecer justificado, simplemente reconociendo que no creo que tengamos tracción porque los que lo quieren son probablemente más vocales que los que no lo hacen. Así que una solución al menos nos da una solución. –
Además, ¿cuándo alguien querría este comportamiento? ¿Desea que el 'TextBox' llame a get después de que se haya configurado desde' TextBox', pero no si la propiedad está configurada desde otro lugar? No tiene sentido para mí ... –