我想知道如何最好地验证WPF mvvm模式上的一些用户输入?我已经在ViewModel中实现了IDataErrorInfo。但是我不知道如何在引发异常时使用此接口(interface)。我的目的是在viewModel中没有任何逻辑。因此,验证必须在业务逻辑类中。
有界字段是我的ViewModel中的属性“名称”。它是
ValidatesOnDataErrors=True
我的 View 模型中的Property看起来像这样:
//Property in ViewModel
public string Name
{
get
{
return myBl.Name;
}
set
{
try
{
myBl.Name = value;
}
catch(InvalidCastException e)
{
Console.WriteLine(String.Format("Es ist eine Exception aufgetreten: {0}", e.Message));
}
}
}
业务逻辑如下所示:
//BusinessLogic Class
public string Name
{
get { return name; }
set
{
if (value.Contains('1'))
throw new InvalidCastException("Cannot contain 1");
name = value;
}
}
异常按建议抛出,但如何继续?我希望e.Message是
ValidationErrorMessage
。我发现的唯一例子是在
public string this[string propertyName]
{
get
{ throw new NotImplementedException()}
}
但这似乎不是异常(exception)的可行方法。
最佳答案
不要在ViewModel属性中捕获任何异常:
public string Name
{
get
{
return myBl.Name;
}
set
{
myBl.Name = value;
}
}
并检查数据绑定(bind)对话框中的ValidateOnExceptions选项(或XAML代码中的
ValidatesOnExceptions=True
)。关于c# - 如何在WPF中为IDataErrorInfo使用异常消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30036940/