Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CanExecute抛出异常_C#_.net_Wpf - Fatal编程技术网

C# CanExecute抛出异常

C# CanExecute抛出异常,c#,.net,wpf,C#,.net,Wpf,在我的XAML代码中,我发出了一些命令: <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Open" Executed="OpenCommandHandler" /> <CommandBinding Command="ApplicationCommands.Save" Executed="SaveCommandHandler" CanExecuted="Ca

在我的XAML代码中,我发出了一些命令:

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Open" Executed="OpenCommandHandler"  />
    <CommandBinding Command="ApplicationCommands.Save" Executed="SaveCommandHandler" CanExecuted="CanSaveCommandHandler" />
    <CommandBinding Command="ApplicationCommands.Delete" Executed="DeleteCommandHandler" CanExecuted="CanDeleteCommandHandler" />
    <CommandBinding Command="{x:Static local:MainWindow.AddCommand}" Executed="AddCommandHandler" CanExecuted="CanAddCommandHandler" />

我的CanExecute方法是什么样子的:

private ResearcherObservableCollection list;
    public Researcher res;
    public static RoutedCommand AddCommand = new RoutedCommand("Add", typeof(WpfApplication3.MainWindow));
    private int _errors = 0;

    public MainWindow()
    {
        InitializeComponent();
        list = new ResearcherObservableCollection();
        res = new Researcher();
        this.DataContext = list;
    }

 private void CanSaveCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {
        if (list.Changes == true)
            e.CanExecute = true;
        else e.CanExecute = false;
    }
private void CanAddCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {


        {
            e.CanExecute = true;


            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(Adding); i++)
            {
                var child = VisualTreeHelper.GetChild(Adding, i);
                if (Validation.GetHasError(child)) { e.CanExecute = false; }
            }
        }

    }

private void CanDeleteCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {
        if (((Project)this.projlst.SelectedItem) != null) e.CanExecute = true;
        else e.CanExecute = false;
    }
private researcherobservable收藏列表;
公共研究人员资源;
publicstaticroutedcommand AddCommand=newroutedcommand(“Add”,typeof(WpfApplication3.MainWindow));
私有int_错误=0;
公共主窗口()
{
初始化组件();
列表=新的ResearchRobservableCollection();
res=新研究人员();
this.DataContext=list;
}
私有void CanSaveCommandHandler(对象发送方,CanExecuteRouteEventArgs e)
{
if(list.Changes==true)
e、 CanExecute=true;
否则e.CanExecute=false;
}
私有void CanAddCommandHandler(对象发送方,CanExecuteRoutedEventArgs e)
{
{
e、 CanExecute=true;
for(int i=0;i

当我不使用CanExecute方法而只使用Executed时,一切都正常。但问题是,我必须在执行之前检查一些参数。我有一个例外。也许你也有类似的问题?如何更正代码?

我处理了我的问题。我想CanExecute方法在我创建列表之前就被调用了。因此,我们必须检查它们是否为空:

 private void CanAddCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {
        //if (VisualTreeHelper.GetChild(Adding))

        {
            e.CanExecute = true;

            //for (int i = 0; i < VisualTreeHelper.GetChildrenCount(Adding); i++)
            //{
            //    var child = VisualTreeHelper.GetChild(Adding, i);
            //    if (Validation.GetHasError(child)) { e.CanExecute = false; }
            //}

            if (Adding != null)
            {

                for (int i = 0; i < Adding.Children.Count; i++)
                {
                    var child = Adding.Children[i];
                    if (Validation.GetHasError(child)) { e.CanExecute = false; break; }
                }
            }
            else e.CanExecute = false;

        }

    }

 private void CanSaveCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {
        if (lst != null)
        {
            if (list.Changes == true)
                e.CanExecute = true;
            else e.CanExecute = false;
        }
        else e.CanExecute = false;
    }

private void CanDeleteCommandHandler(object sender, CanExecuteRoutedEventArgs e)
    {
        if (lst != null)
        {
            if (((Researcher)this.lst.SelectedItem) != null) e.CanExecute = true;
        }
        else e.CanExecute = false;
    }
private void CanadCommandHandler(对象发送方,CanExecuteRouteEventArgs e)
{
//if(VisualTreeHelper.GetChild(添加))
{
e、 CanExecute=true;
//for(int i=0;i
XAML代码中的一些更改:

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Open" Executed="OpenCommandHandler" />
    <CommandBinding Command="ApplicationCommands.Save" Executed="SaveCommandHandler" CanExecute="CanSaveCommandHandler" />
    <CommandBinding 
                    Command="ApplicationCommands.Delete"
                    CanExecute="CanDeleteCommandHandler"
                    Executed="DeleteCommandHandler" />
    <CommandBinding Command="{x:Static local:MainWindow.AddCommand}" Executed="AddCommandHandler" CanExecute="CanAddCommandHandler"/>

</Window.CommandBindings>


您能查一下TargetInvocationException的innerexception是什么吗?是否执行了
输入错误?当我编译它时,它应该是
CanExecute
,Window没有;我没有加载,所以我决定调试,它说TargetInvocationException没有得到处理是的,CanExecute,但它仍然不起作用这是什么?是实例化的吗?请原谅我的英语(