2010-08-17 61 views
0

我正在使用WPF和MVVM模式的树结构。我从创建20个根节点开始,并在每个节点被点击时延迟加载子节点。举例来说,如果我有以下内容:我可以在MVVM模式中禁止“CanExecute”调用

Level 1 
    Level 1.1 
Level 2 
Level 3 
    Level 3.1 
    Level 3.2 

级别1,2和3在运行时加载。级别1.1,3.1和3.2将不会被加载,直到他们各自的父母被点击。级别低于1.1等,通过点击他们的父母以相同的方式加载。

我的问题是,当我点击Level 1.1加载它的子项时,为Level 1.1和Level 1.1的每个子项的所有根级别项目检查了“CanExecute”方法。如果有很多孩子,这会造成很多浪费时间。

我的问题是,我可以以某种方式抑制对“CanExecute”的调用?我不需要将它称为这些子级别,我想绕过它。我对MVVM框架非常陌生,所以我不确定这是否可能。

回答

1

如果您在视图模型中使用Prism(WPF和SilverLight的复合应用程序指导)'DelegateCommand',则只要您希望在其上调用CanExecute,就必须显式调用command.RaiseCanExecuteChanged。

+0

不幸的是,我们没有使用棱镜。我们正在使用Unity框架。我应该在我的问题中澄清。 – 2010-08-18 02:26:44

+0

您不需要使用Prism来使用DelegateCommand。您可以从源代码或Interwebs上的任何其他DelegateCommand实现中抽取它。这是一个非常简单的课程。 这就是说,这是不足以解决你的“问题”。这是因为无论CanExecuteChanged事件如何,WPF都会调用“CanExecute”。 我把“问题”放在引号中,因为我质疑它是否真的有问题。如果你的CanExecute的实现是快速和小型的(它应该是),它应该没关系。通过将呼叫禁止到CanExecute中,您试图解决什么问题? – 2010-08-18 12:07:45

+0

布赖恩是正确的,你不需要使用棱镜来使用DelegateCommand。但是,从图书馆中抽出东西并随时随地使用它几乎总是一个维护问题。 这就是说我采取我的声明,你将不得不显式调用RaiseCanExecuteChanged的CanExecute被调用,回不正确。我的棱镜应用的结构是这样的,但不一定总是如此。 – NVM 2010-08-18 12:33:22

相关问题