我想知道如何最好地验证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/

10-17 01:11