Estoy vinculando un TextBox con una propiedad que es de tipo flotante. Todo funciona bien, cambio el valor en TextBox y se actualiza en la propiedad. El problema ocurre cuando hago el TextBox en blanco, mi propiedad no se actualiza, todavía tiene un valor anterior. Ahora necesito usar el convertidor en mi enlace para actualizar la propiedad con el valor predeterminado en el caso de un valor en blanco de TextBox. Quiero saber por qué este comportamiento? ¿Hay alguna otra solución para esto?Enlace de datos no se actualiza cuando TextBox está vacío
Respuesta
Su propiedad no se actualiza porque no es posible convertir una cadena vacía para flotar. Hay dos formas de resolver esto.
La primera forma es agregar una propiedad cuyo tipo es una cadena, unir el TextBox con ella e implementar el cambio de la propiedad float. De esta manera:
public partial class Window1 : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public Window1()
{
InitializeComponent();
// don't use this as DataContext,
// it's just an example
DataContext = this;
}
private float _FloatProperty;
public float FloatProperty
{
get { return _FloatProperty; }
set
{
_FloatProperty = value;
OnPropertyCahnged("FloatProperty");
}
}
private string _StringProperty;
public string StringProperty
{
get { return _StringProperty; }
set
{
_StringProperty = value;
float newFloatValue;
// I think you want 0 when TextBox is empty, right?
FloatProperty = float.TryParse(_StringProperty, out newFloatValue) ? newFloatValue : 0;
OnPropertyCahnged("StringProperty");
}
}
protected void OnPropertyCahnged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("StringProperty"));
}
}
}
La segunda manera es utilizar un convertidor:
namespace WpfApplication3
{
public partial class Window1 : Window, INotifyPropertyChanged
{
public static readonly IValueConverter TextBoxConverter = new FloatConverter();
/* code from previous example without StringProperty */
}
public class FloatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
float f;
if (value is string && float.TryParse(value as string, out f))
{
return f;
}
return 0f;
}
}
}
XAML:
<Window x:Class="WpfApplication3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication3="clr-namespace:WpfApplication3">
<Grid>
<TextBox Text="{Binding FloatProperty, Converter={x:Static WpfApplication3:Window1.TextBoxConverter}}" />
</Grid>
</Window>
Hay an article about converters
Yo prefiero la primera forma con MVVM pattern.
Creo que el problema sería que el sistema de enlace coincida con un TextBox vacío. Para ti podría ser cero, pero para otra persona podría ser Single.NegativeInfinity.
acaba de cambiar el enlace como este
<TextBlock Text={Binding Path=Name, TargetNullValue='',UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}/>
¿Quién hace este trabajo, por ejemplo, ha establecido TargetNullValue en una cadena y no en un flotante? –
Esto fue agregado en .3.5 sp1 aparentemente. No era consciente de eso hasta ahora. ¡Aclamaciones! – Daniel
bien, guarde el compañero de trabajo gud –
- 1. MVC2 TextBox ¿El valor no se actualiza después del envío?
- 2. ASP.NET GridView RowCommand TextBox vacío
- 3. WPF TextBox ¿Borde cuando está seleccionado?
- 4. SharedPreferences no se actualiza
- 5. WPF TextBox Enlace con formato
- 6. ¿Verifica si TextBox está vacío y devuelve MessageBox?
- 7. ¿Qué devuelve un IQueryable vacío como cuando está vacío?
- 8. Ancla de enlace vacío
- 9. LINQ to SQL no se actualiza cuando los datos han cambiado en la base de datos
- 10. experto-metadata.xml no se actualiza cuando se despliega al nexo
- 11. cabecera de cookies no válido: No se puede analizar expira atributo cuando expira atributo está vacío
- 12. Combobox SelectedItem no se actualiza cuando la fuente cambia
- 13. ¿Qué significa exactamente cuando $ _FILES está vacío?
- 14. ordenable y droppable, no se actualiza, cuando DOM lo hace?
- 15. Android SimpleCursorAdapter no se actualiza cuando la base de datos cambia
- 16. WPF DataGrid no puede Agregar una fila cuando el origen de datos está vacío
- 17. DrawingVisual no se actualiza
- 18. vista vacía cuando ListView está vacío
- 19. Actualización de la base de datos sqlite cuando la base de datos del servidor se actualiza
- 20. ListView LayoutTemplate no se muestra cuando vacío asp.net
- 21. cómo se comprueba si UIWebView está vacío o no
- 22. WPF: Cuadro de texto texto no se actualiza
- 23. Mostrar el mensaje "No se encontró registro" en un WGD DataGrid cuando está vacío
- 24. jQuery - validación de entrada sencilla - "vacío" y "no está vacío"
- 25. Cómo mostrar un gráfico/animación de carga cuando se está produciendo el enlace de datos wpf
- 26. Winforms listbox no se actualiza cuando los cambios de datos vinculados
- 27. DataAdapter.Update() no actualiza la base de datos
- 28. iOS KeychainItemWrapper no se actualiza
- 29. Enlace de datos bidireccional con el convertidor no actualiza la fuente
- 30. En C# (WPF), ¿se produce un enlace de datos cuando los cambios de datos en la interfaz de usuario se procesan inmediatamente?
¡Ya entendí, gracias por la respuesta! – viky