Я привязываю TextBox к свойству типа float. Все работает отлично, я меняю значение в TextBox и оно обновляется в свойстве. Проблема возникает, когда я делаю TextBox пустым, мое свойство не обновляется, оно все еще имеет старое значение. Теперь мне нужно использовать конвертер в моей привязке для свойства update со значением по умолчанию в случае пустого значения из TextBox. Я хочу знать, почему это поведение? Есть ли другое решение?Data Binding не обновляется, когда TextBox пуст
ответ
Ваше имущество не обновляется, потому что это не возможно, чтобы преобразовать пустую строку плавать. Это можно решить двумя способами.
Первый способ - добавить свойство, которое является строкой, связать с ним текстовое поле и реализовать изменение свойства float. Как это:
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"));
}
}
}
Второй способ заключается в использовании конвертера:
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>
Существует an article about converters
Я предпочитаю первый путь с MVVM pattern.
Я думаю, проблема в том, что система привязки соответствует пустой TextBox. Для вас это может быть ноль, но для кого-то это может быть Single.NegativeInfinity.
просто изменить Binding как этот
<TextBlock Text={Binding Path=Name, TargetNullValue='',UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}/>
Кто выполняет эту работу, например, вы установили TargetNullValue в строку, не являющуюся поплавком? –
Это было добавлено в .net3.5 sp1, очевидно. Я до сих пор не знал об этом. Ура! – Daniel
отлично, держите гуд работать приятель –
- 1. Скрыть границу, когда TextBox пуст
- 2. TextBox привязки не обновляется, когда очищается вверх
- 3. Отключить элемент MenuItem, когда TextBox UserControl пуст
- 4. WPF Binding не обновляется, когда переплетен объект обновляется
- 5. WPF Binding не обновляется
- 6. Data Binding не работает
- 7. DataContext свойство связано с TextBox.Text не обновляется, когда TextBox очищается
- 8. Строка, привязанная к TextBox, не обновляется
- 9. TextBox - свойство связывания не обновляется сама
- 10. Data Binding - C#
- 11. Значение TextBox не обновляется
- 12. TextBox не обновляется
- 13. Data binding свойство не работает
- 14. WPF Data Binding
- 15. wpf combobox binding пуст
- 16. Ember Array binding не обновляется
- 17. Childwindow + Custom Textbox binding problems
- 18. WPF Tooltip binding не обновляется
- 19. Binding Double to TextBox
- 20. ImageBrush Opacity Binding для TextBox
- 21. TextBox BorderBrush не обновляется после изменения текста
- 22. Ember Data, hasMany не обновляется
- 23. Переплет в WPF ListBox не обновляется TextBox, когда данные изменены
- 24. Правила проверки привязки WPF TextBox не сжигаются на LostFocus, когда TextBox пуст
- 25. Silverlight Data Binding
- 26. WPF enum binding не обновляется
- 27. WPF Binding DataGrid не обновляется
- 28. ASP Textbox CSS и Data Binding Expression Issue
- 29. D3 Data Binding - Когда в скобки данных
- 30. XAML TextBox isReadOnly Binding
Я получил вашу точку, спасибо за ответ !! – viky