我將文本框與類型爲float的屬性綁定。一切工作正常,我改變了TextBox的值,並在屬性中更新。當我使TextBox變爲空白時,我的屬性沒有得到更新,它仍然具有舊的價值。現在,我需要在綁定中使用轉換器,以便在來自TextBox的空值的情況下使用默認值更新屬性。我想知道爲什麼這種行爲?還有其他解決方案嗎?當文本框爲空時,數據綁定不會更新
回答
你的財產沒有更新,因爲它不可能空字符串浮動轉換。有兩種方法可以解決這個問題。
第一種方法是添加一個類型爲string的屬性,將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>
我喜歡用MVVM pattern第一種方式。
我認爲問題在於綁定系統匹配一個空的TextBox。對你而言,它可能爲零,但對於其他人可能是Single.NegativeInfinity。
只是更改綁定這樣
<TextBlock Text={Binding Path=Name, TargetNullValue='',UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}/>
誰從事這項工作,例如你已經將TargetNullValue設置爲一個字符串而不是浮點數? –
這顯然是在.net3.5 sp1中添加的。直到現在我還沒有意識到這一點。乾杯! – Daniel
好,保持工作夥伴 –
- 1. 數據綁定文本框更新不會堅持到DB
- 2. 當文本框更改而不是丟失焦點時更新數據綁定
- 3. 更改綁定對象時不會更新文本框集中
- 4. 雙向數據綁定:更新不更新綁定屬性的文本框
- 5. C#綁定文本框不會更新使用tableadapter更新
- 6. 文本塊不更新數據綁定
- 7. 文本框不會更新數據庫
- 8. 綁定的文本框文本不會更新
- 9. 文本框綁定不會刷新
- 10. 當文本框爲空它不會插入數據
- 11. WPF數據綁定,值不會更新
- 12. DataGrid在重新綁定新數據存儲時不會更新
- 13. 清除文本框不會將綁定設置爲空
- 14. 數據綁定,以便更改文本框值更新LIstBox
- 15. 文本框綁定不會在RaisePropertychanged上更新
- 16. 文本框綁定的屬性值不會立即更新
- 17. WPF文本框綁定不會更新與拖放
- 18. Android:數據綁定文本未更新
- 19. 文本框數據綁定
- 20. 當Angular2屬性發生更改時,數據綁定不會更新
- 21. 更改綁定數據時DataRepeater不會更新
- 22. 數據綁定爲兩個文本框
- 23. 當綁定到函數時,UWP TextBlock不會更新
- 24. 數據綁定列表框將不會更新
- 25. 綁定複選框不會更新其數據源
- 26. 更改文本框到文本框丟失數據綁定 -
- 27. WPF數據綁定更新不及時
- 28. WPF數據綁定更新不及時
- 29. 數據綁定文本框不與源
- 30. 數據綁定不更新
我明白了,謝謝你的回答! – viky