Hai all, 我正在做一個使用MVVM模型的項目,任何人都可以通過說我如何驗證我在這個模型中的字段來幫助我。驗證的意思是,如果一個文本字段的名稱(示例)是沒有被用戶添加,那麼一條消息就會被顯示出來,使用彈出窗口或任何東西.Nolramlly我們通過編寫一個函數來完成這個任務,並且這個函數會在保存之前被調用,或者在這個時候如果任何的Mandetory字段是免費的,那麼只會在填充該字段後纔會顯示錯誤,我們可以繼續。如何在MVVM模型中執行此操作?在MVVM模型驗證
2
A
回答
0
好吧我不是100%確定你要去哪裏,但我會舉一個例子。不知道這將如何與MVVM一起工作,但我想它應該。當你打電話給你的IsValid方法,它會檢查每個屬性
public class RuleViolation
{
public string ErrorMessage { get; private set; }
public string PropertyName { get; private set; }
public RuleViolation(string errorMessage, string propertyName)
{
ErrorMessage = errorMessage;
PropertyName = propertyName;
}
}
現在:
在模型中添加此:
public bool IsValid
{
get
{
return (GetRuleViolations().Count() == 0);
}
}
public override IEnumerable<RuleViolation> GetRuleViolations()
{
if (string.IsNullOrEmpty(Name))
yield return new RuleViolation("Name can't be empty", "Name");
else if (Name.Length >= 30)
yield return new RuleViolation("Name can't be more then 30 letters", "Name");
if (!string.IsNullOrEmpty(Address))
{
if (!Web.Contains("http"))
yield return new RuleViolation("Address must be bla bal", "Address");
}
// and so on
yield break;
}
並創建RuleViolation類。如果您正在使用INotifyPropertyChanged,我將添加IsValid作爲屬性,以便在每次更新任何已驗證的屬性時進行更新。如果你有一個基本模型類,你可以有加,並定義了每個派生類的規則:
public bool IsValid
{
get
{
return (GetRuleViolations().Count() == 0);
}
}
public abstract IEnumerable<RuleViolation> GetRuleViolations();
現在的問題是你如何顯示在您的UI此錯誤。那取決於用戶界面是什麼。我們假設WPF應用程序。然後,你需要你的模型繼承IDataErrorInfo的,你可以使用它像這樣:
#region IDataErrorInfo Members
public string Error
{
get { return null; }
}
public string this[string name]
{
get
{
string result = null;
if (this.GetRuleViolations().Where(v => v.PropertyName == name).Count() > 0)
{
result = this.GetRuleViolations().Where(v => v.PropertyName == name).First().ErrorMessage;
}
return result;
}
}
然後在XAML代碼:
<TextBox Style="{StaticResource ValidationTextBox}" >
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<DataErrorValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Style x:Key="ValidationTextBox" TargetType="TextBox" >
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
如果您正在使用Asp.net的UI也有一些在建方法也顯示在那裏的形式的錯誤。
我可能會和有更好的方法,但我希望這有些幫助。
相關問題
- 1. MVVM模型間驗證
- 2. 在silverlight中驗證模型MVVM
- 3. MVVM模型驗證和數據綁定?
- 4. 驗證在模型
- 5. 驗證MVVM WPF
- 6. 模型驗證
- 7. 模型驗證
- 8. Rails驗證 - 在創建子模型時驗證父模型
- 9. MVVM,WPF和驗證
- 10. 模型驗證在軌
- 11. BackboneJS:collection.pluck()在模型驗證
- 12. 在警予模型驗證
- 13. 在ASP.Net驗證模型MVC2
- 14. 模型和控件中的WPF MVVM驗證
- 15. 模型驗證Symfony2
- 16. 模型未驗證
- 17. Backbone.js驗證模型
- 18. Zend模型驗證
- 19. 驗證域模型
- 20. 模型驗證與
- 21. Java模型驗證
- 22. 域模型驗證?
- 23. MVC模型驗證
- 24. Kohana驗證模型
- 25. Yesod模型驗證
- 26. 使用MVVM-Helpers驗證屬性的WPF MVVM驗證問題
- 27. WTForms驗證綁定到模型驗證
- 28. WPF MVVM:模型
- 29. MVVM模型
- 30. 如何設置模型在模型(MVVM)
非常感謝您的回覆,無論如何,我會盡力實現這一點。 – user421678 2010-08-16 12:25:34
那麼你使用的是什麼UI實現? – 2010-08-16 12:39:37