Prism DelgateComand抛出异常

时间:2017-03-24 12:58:31

标签: c# wpf prism delegatecommand

我有一个静态委托命令。我正在将bool传递给构造函数。但是,它抛出了运行时异常。

public static class myViewModel
{
    public static ICommand myCommand {get; private set;}

    static myViewModel
    {
        //If I change the bool to Object, or to Collection type, no exception assuming that I change myMethod parameter as well to the same type.
        myCommand = new DelegateCommand<bool>(myMethod);
    }

    private static void myMethod (bool myBoolean)
    {
        //To Do
    }
}

1 个答案:

答案 0 :(得分:2)

始终,始终,始终告诉我们您获得的异常的类型,以及消息的异常。它们有许多不同的例外,因为每个人都因为不同的原因而被抛出。

但在这种情况下,看起来问题是bool是一个值类型,执行命令的代码为参数传递null。但是你不能将null转换为值类型,并且尝试这样做会导致运行时异常:

object o = null;
//  This will compile, but blow up at runtime. 
bool b = (bool)o;

我预测string会起作用,而intdoubleDateTime会导致与bool相同的异常。但是在这三种值类型中的任何一种上添加问号都会使其与bool相同。

尝试将参数类型更改为bool?,因此null将是可接受的值。

static myViewModel
{
     myCommand = new DelegateCommand<bool?>(myMethod);
}

private static void myMethod (bool? myBoolean)
{
     if (myBoolean.HasValue)
     {
         MessageBox.Show("myBoolean was not null");
     }

     if (myBoolean.GetValueOrDefault(true))
     {
         MessageBox.Show("myBoolean was either true or null");
     }
}