2012-05-16 60 views
5

我剛剛搜索了約2小時,並沒有發現任何東西。Windows 8地鐵:實施驗證

考慮以下情形:

public class Person 
{ 
    [Required] 
    public string Name { get; set; } 
} 

XAML:

<TextBox Text="{Binding Name, Mode=TwoWay}" /> 

你會如何去自動獲得驗證的反饋對UI好像有在MVC3?

(哦,我真的不此刻關心,如果我將能夠使用集成DataAnnotations像[必需]與否)

任何幫助,非常感謝!

回答

13

我向WinRT XAML Toolkit添加了一些東西。這就是所謂的TextBoxValidationExtensions,並允許你這樣定義的驗證:

<TextBox 
    Width="400" 
    HorizontalAlignment="Left" 
    xyzc:TextBoxValidationExtensions.Format="NonEmptyNumeric" 
    xyzc:TextBoxValidationExtensions.InvalidBrush="Red" 
    xyzc:TextBoxValidationExtensions.ValidBrush="Green" /> 

該格式目前定義爲:

[Flags] 
public enum ValidTextBoxFormats 
{ 
    Any = 0, 
    NonEmpty = 1, 
    Numeric = 2, 
    NonEmptyNumeric = 3 
} 

整個代碼是有點太長,在這裏分享。您可以從CodePlex上取出代碼並修改自己的喜好 - 添加新的驗證規則,修改默認刷等

+0

看來這是訣竅!無論如何,你能解釋我如何能夠在代碼而不是XAML中設置它嗎? – Shion

+0

如果您使用的是MVVM,那麼您將擁有某種字段的視圖模型,並帶有Text和Format屬性,因此您只需設置像xyzc這樣的綁定:TextBoxValidationExtensions.Format =「{Binding Format}」。如果你只是在後面做代碼,那麼你會調用TextBoxValidationExtensions.SetFormat(myTextBox,ValidTextBoxFormats.Numeric)。 –

+0

Jerry Nixon在他的博客中描述了另一種解決方案[這裏 - Let's Code!處理Windows應用商店中的驗證](http://blog.jerrynixon.com/2014/07/lets-code-handling-validation-in-your.html)。 –

0

只需使用事件在特定XAML控制,如如果textbox使用pointerexited並在代碼編寫一個函數後面執行所需的驗證。

+0

儘管問題已經得到解答:您的建議會導致代碼非常複雜且難以維護。 Filip Skakun已經(在公認的答案中)已經完美回答了。 :) – Shion

-1

看起來,基於框架中提供的支持,您對文本字段進行「驗證」的非凡想法非常罕見且不常見,因此根本無需考慮。我們都知道,如果你想做的事情是普遍的或有用的,那麼在這樣一個精心設計的全面框架中就會考慮這樣一個特點。

+0

爲什麼不需要驗證一個文本框,比如說URL,數字,基本電子郵件或其他東西?當然,你可以通過單擊按鈕來進行驗證,並將所需的樣式添加到文本框中,但有時這不是必需的。而且:僅僅因爲它不在框架中並不意味着它不是所需/不需要的。 – Shion

+0

@Shion找到一本字典,並查找單詞'sarcasm' – HappyNomad

+0

有人認爲上面的回答嚴重的東西... – Shion