首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanExecute抛出异常

CanExecute抛出异常
EN

Stack Overflow用户
提问于 2016-04-06 16:57:28
回答 1查看 161关注 0票数 0

在我的XAML代码中,我使用了一些命令:

代码语言:javascript
复制
<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方法是什么样子:

代码语言:javascript
复制
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;
    }

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

EN

回答 1

Stack Overflow用户

发布于 2016-04-07 19:53:52

我解决了我的问题。我认为在我创建列表之前调用了CanExecute方法。因此,我们必须检查它们是否不为空:

代码语言:javascript
复制
 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;
    }

XAML代码中的一些更改:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36446184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档