2013-04-29 119 views
0

我正在使用WPF,MVVM-Light。 在我的用戶界面我有一個文本框,我想阻止用戶在文本框中輸入某些字符。 我知道如果我們使用代碼隱藏功能,我可以處理keyPress按鍵事件,我可以通過MVVM實現嗎? 我們可以使用一些行爲或一些交互觸發器嗎?防止用戶在文本框中輸入某些字符

回答

0

是的,要篩選輸入MVVM的方式,我會建議使用自定義控件(如掩碼TextBox控件)或行爲。

我最近在尋找一個很好的蒙面TextBox,從Xceed有一個免費的,你可以找到here。我不能說這個,因爲我沒有用過它,但我對過去使用過的其他Xceed組件感到滿意。

但是我不想去第三方幷包含一堆我不需要的控件,所以我最終創建了一個簡單地附加到TextBox並基於FilterType過濾輸入的行爲。該行爲非常易於創建,您只需使用PreviewTextInput事件過濾掉不需要的字符即可。

This SO Answer有許多關於如何過濾/屏蔽輸入的建議和鏈接,如果您不熟悉創建附加行爲,this example會顯示如何爲屏蔽文本框創建附加行爲。

1

使用代碼隱藏完全可以,MVVM提供的代碼隱藏只與您的View有關。

所以,如果你有一些,說「用戶不僅可以在此框中鍵入數字」視圖特定的邏輯,那麼它完全可以寫一KeyPress事件爲TextBox,只允許被處理的數字鍵。你甚至可以把它放入UserControl,這樣它可以重用。

但是,如果你允許的字符邏輯是基於應用程序的邏輯,如「用戶只能使用該字符串值app.config文件中定義的字符」,那麼你會更好驗證,在ViewModel。

另請注意,限制與驗證不同。

如果你想驗證用戶的條目,那麼我就這麼用IDataErrorInfo從視圖模型層,可能是一個與UpdateSourceTrigger=PropertyChanged模式,因此驗證每一個按鍵後檢查結合做。

如果你想限制哪些字符可鍵入到TextBox,那麼我可能會做,從代碼視圖層後面,因爲這是查看的功能。

相關問題