我已經看到數字TextBox
的實現,其代碼位於WPF
之後。我們如何在MVVM
模式中做到這一點?帶MVVM模式的數字文本框
回答
老實說 - MVVM和數字文本框有什麼共同點?
如果您希望數字文本框創建新的TextBox或AttachedProperty或行爲。 Here是一個MaskedTextbox行爲的例子,以瞭解我的意思。
現在到您的MVVM部分。我假設你想驗證你的輸入只是數字。如果你的viewmodel有一個int類型的屬性,那麼你的綁定就可以工作,如果你的視圖有可轉換爲int的輸入。否則你的viewmodel將永遠不會被通知。現在有兩種方法:
第一:你確保你的視圖只需要數字輸入(使用數字文本框),而viewmodel屬性可以是int。
或第二種:您的viewmodel屬性類型是typeof字符串,並且您使用IDataErrorInfo讓視圖知道輸入何時不是數字。
那麼......如果你希望在你的viewmodel中通知數字文本框的文本屬性變化只是綁定到它。如果數字文本框的.Text屬性不是依賴項屬性,那麼編碼器!
這一個:http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home
我可以推薦你可以從視圖模型通過綁定到它:
<!-- View: -->
<NumericTextBox Text="{Binding MyViewModelTextStringProperty}" />
//ViewModel:
public string MyViewModelTextStringProperty
{
get/set with NotifyPropertyChanged....
}
通過MVVM的標準定義,你不會想要一個視圖模型背後自定義控件。你所要做的就是擴展TextBox控件,並確保只輸入數字輸入。您還應該添加一個返回數字輸入的DependencyProperty。
當在窗口或複合控件中使用該控件時,ViewModel會進入。您可以將Text或Numeric DependencyProperty綁定到ViewModel中的公共屬性。
如果你真的想在ViewModel中做到這一點,你必須讓你的綁定屬性成爲一個字符串。確保在每次擊鍵時綁定更新(使用UpdateSourceTrigger
)。
在您的setter中,通過引發異常或修剪非數字字符來拒絕非數字值。後一種方法有利於複製/粘貼操作,其中粘貼的文本可能包含數字和字母的混合,但只有數字必須保留。這就是說,我同意其他建議,即擁有一個專門的控件只顯示一個數字屬性是一個更清潔的方法。
Regards,
Eric。
在WPF中,如果將TextBox綁定到Decimal或Int屬性,它將只接受該int或decimal,否則它將顯示一個紅色邊框,表明它在綁定中沒有適當的值。如果你正在談論數字updown文本框,那麼它是隨WPF工具包隨時可用here
- 1. 帶數字模式的文本鍵盤
- 2. wpf mvvm datepicker文本框自動格式
- 3. 帶有MVVM模式的WPF OpenFileDialog?
- 4. 帶有MVVM模式的WPF MessageBox?
- 5. 文本框在DataTemplate中MVVM
- 6. 帶數據模板的MVVM密碼箱
- 7. 帶模型樹的MVVM
- 8. 如何使用MVVM模式將數據與富文本框綁定?
- 9. 帶彈出式文本框的MenuItem
- 10. 數字文本框的角度格式
- 11. 帶子窗口和共享數據的Silverlight MVVM模式
- 12. 帶密碼模式的文本框丟失值
- 13. 帶有字母數字檢查的文本框中的javascript
- 14. 帶有不同顏色的字母數字的GWT文本框
- 15. 帶PDFBox的文本渲染模式
- 16. 文本框模式日期
- 17. 使用MVVM禁用文本框取決於文本框的值?
- 18. WPF MVVM中的GridView中的文本框
- 19. 顯示對話框MVVM模式
- 20. WPF MVVM DialogService關閉模式對話框?
- 21. ASP.NET MVVM模式
- 22. MVVM模式javascript
- 23. 帶有上下文的Android MVVM數據模型
- 24. C#實體框架:使用MVVM的單身上下文模式
- 25. 如何清除MVVM中的文本框?
- 26. 可選的TextBlock或帶有WPF格式文本的文本框
- 27. 格式化劍道數字文本框
- 28. 數字文本框
- 29. 帶onchange事件的數組文本框
- 30. 帶有數據驗證的文本框
我將MVVM包含在其中的原因是,我看到了在後臺代碼中使用Preview Key事件的實現。我只是想消除這些答案 – katie77
@Bindindis,我可以在那個大聲笑翻譯 –