我最近開始玩MVVM,在偶遇之前,我偶然發現了一個似乎很多的問題。在WPF中綁定浮點輸入字段時出現問題
本質上我有一個在我的模型中的double類型的屬性,該屬性鏈接到ViewModel中的字符串屬性,實現INotifyPropertyChanged接口,該接口綁定到文本框的Text屬性,UpdateSourceTrigger設置爲PropertyChanged ,但是文本框不會讓我輸入小數位或減號,也不能在沒有應用程序崩潰的情況下將文本框設置爲空白。
我徹底搜索瞭解決方案,發現了很多可能的解決方案,但在某些方面起作用,但留下了其他問題。最終我用的東西相結合來解決這個問題:
我發現this要使用,並通過將:
public App()
{
System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
}
在App.xaml.cs我現在可以插入小數放置在我的文本框中。但是我仍然不能使用' - ',也不能將文本框設置爲空白。
爲了解決這個問題,我做了兩件事。在我的XAML中,我將下面的StringFormat添加到了我的數據綁定中。
<TextBox Text="{Binding StringLinkedToDouble, UpdateSourceTrigger=PropertyChanged, StringFormat=-N2}"/>
的「 - 」的「N2」之前,讓我輸入一個減號,但除非我第一次輸入的數值,然後進入了「 - 」在號碼開頭的代碼拋出一個錯誤。爲了解決這個問題,而事實上,我不能設置文本框爲空,而不會在一個錯誤,我做這在我的視圖模型:
public StringLinkedToDouble
{
get { return _model.DoubleToBeLinked.ToString(); }
set
{
if ((value != "") && (value != "-"))
_model.DoubleToBeLinked = Convert.ToDouble(value);
RaisePropertyChanged("StringLinkedToDouble");
}
}
雖然這工作,我是新來的MVVM和我發佈這個的原因是因爲這個解決方案看起來非常簡單,幾乎太簡單了,我擔心MVVM可能不會「好」。我有一半希望被告知這不公平哈哈!如果是這樣的話,有人可能會提出一個更好的選擇?提前致謝! 另外,如果還有什麼我已經做了哪些是不適當MVVM那麼請讓我知道:)
將文本框綁定到視圖模型上的字符串應該是微不足道的。我認爲你做錯了「..在我的模型,這是鏈接到一個字符串屬性.. ..雙重..」 – Crowcoder