Jestem powiązanie TextBox z właściwością, która jest typu float. Wszystko działa dobrze, zmieniam wartość w TextBox i aktualizuje się w nieruchomości. Problem występuje, gdy pole tekstowe jest puste, moja właściwość nie jest aktualizowana, nadal ma starą wartość. Teraz muszę użyć konwertera w moim powiązaniu, aby zaktualizować właściwość z wartością domyślną w przypadku pustej wartości z TextBox. Chcę wiedzieć Dlaczego to zachowanie? Czy jest jakieś inne rozwiązanie tego?Powiązanie danych nie aktualizuje się, gdy pusta ramka TextBox jest
Odpowiedz
Twoja nieruchomość nie jest aktualizacją, ponieważ nie jest możliwe do konwersji pusty ciąg do pływaka. Istnieją dwa sposoby rozwiązania tego problemu.
Pierwszym sposobem jest dodanie właściwości, której typem jest ciąg, powiązanie z nią TextBox i zaimplementowanie zmiany właściwości float. Tak:
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"));
}
}
}
Drugim sposobem jest użycie konwertera:
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>
Jest an article about converters
wolę pierwszy sposób z MVVM pattern.
Myślę, że problem byłby związany z tym, jaki system wiążący pasuje do pustego pola tekstowego. Dla ciebie może to być zero, ale dla kogoś innego może to być Single.NegativeInfinity.
prostu zmienić Binding jak ten
<TextBlock Text={Binding Path=Name, TargetNullValue='',UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}/>
kto to działa, np. Ustawiono TargetNullValue na ciąg, a nie na float? –
Zostało to dodane w .net3.5 sp1 podobno. Nie wiedziałem o tym aż do teraz. Twoje zdrowie! – Daniel
w porządku, zachowaj kumpelkę pracy –
- 1. Powiązanie danych nie aktualizuje się, gdy zmiany właściwości w Angular2
- 2. Powiązanie WPF z INotifyPropertyChanged nie aktualizuje się
- 3. Pandy Pythona sprawdzają, czy ramka danych nie jest pusta.
- 4. Czerwona ramka pozostaje w ramce TextBox nawet po wprowadzeniu danych.
- 5. Przycisk usuwania TextBox (mały x) niewidoczny, gdy ustawiono powiązanie tekstu
- 6. ActiveRecord nie aktualizuje danych
- 7. WPF DisplayMemberPath nie aktualizuje się, gdy SelectedItem został usunięty
- 8. danych wiążące dla TextBox
- 9. AppManager nie aktualizuje się
- 10. W WPF, czy wartość FallbackValue jest używana, gdy powiązanie nie powiedzie się z powodu zerowych odniesień?
- 11. Powiązanie z podwójnym z StringFormat na TextBox
- 12. Xamarin.Forms - ListView nie aktualizuje gdy dane zmienia
- 13. Używanie Thymeleaf, gdy wartość jest pusta
- 14. Zestaw ListBoxItem.IsSelected, gdy podrzędny TextBox jest skoncentrowany
- 15. Filehelpers ExcelStorage.ExtractRecords kończy się niepowodzeniem, gdy pierwsza komórka jest pusta
- 16. deleteRecord nie aktualizuje ArrayController gdy Model jest filtrowany
- 17. Reagowanie i powiązanie danych
- 18. DataGrid SelectedItem nie aktualizuje się
- 19. Prywatne źródło danych NuGet nie aktualizuje się DownloadCount
- 20. Pandy: unikalna ramka danych
- 21. Powiązanie jednostki danych rdzenia nie zapisuje się między uruchomieniami
- 22. Jak powrócić, gdy opcja jest pusta?
- 23. Zmiana koloru tła pola tekstowego nie działa, gdy jest pusta
- 24. Nie zwracaj własności, gdy jest pusta lista z jackson
- 25. Dwukierunkowe powiązanie danych nie działa w dyrektywie
- 26. Heroku nie aktualizuje schematu bazy danych
- 27. Powiązanie danych WPF Zawartość etykiety
- 28. Co to jest powiązanie danych deklaratywnych?
- 29. Powiązanie danych z Javą
- 30. Knockout + customBinding nie aktualizuje
Dostałem twój punkt, dzięki za odpowiedź !! – viky