首页 新闻 搜索 专区 学院

Prism有关DelegateCommand中的CanExecute检查问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-06-25 15:52

在Demo中有如下部分代码

前台:

1 <Button Width="65" Content="提交注册" FontSize="14" Style="{StaticResource BtnStyle}" Command="{Binding RegisterCommand}"/>

后台:

View Code

调试过程中,CanRegister方法只在程序加载过程中执行了一次,也就是说,Button的IsEnabled属性一直是false(IsValid()初值返回false)

问题是:DelegateCommand只对CanRegister执行一次???只能手动在后台调用RaiseCanExecuteChanged()方法???本人初学者,请问有没有其他可行方法。。。还是说代码本身就有问题?求指导。。急。。

WSIDFU的主页 WSIDFU | 初学一级 | 园豆:183
提问于:2013-06-25 12:52
< >
分享
最佳答案
0
 if (registerCommand == null)
                  {
                      registerCommand = new DelegateCommand<object>(OnRegisterExcute, this.CanRegister);
                  }

这段代码只会执行一次,执行完成后

registerCommand 不再为空,被直接返回,所以
CanRegister也只执行了一次
收获园豆:20
WuRang | 小虾三级 |园豆:1730 | 2013-06-25 14:22

请问有什么办法吗?只能手动在后台调用RaiseCanExecuteChanged()方法?

WSIDFU | 园豆:183 (初学一级) | 2013-06-25 15:24

@Smlusm: 如果IsValid变成true,程序能否继续进行呢?

WuRang | 园豆:1730 (小虾三级) | 2013-06-25 15:36

@WuRang: 不会的,IsValid只是一个方法,返回值是bool型而已,它的功能就是判断注册信息是否都填写合法。本来以为CanExecute会自动检测,这样注册信息填写合法了,注册按钮就有效了。但我在调试RelayCommand的CanExecute时,却是无时不刻都在检测,DelegateCommand这个就不一样了。。。

WSIDFU | 园豆:183 (初学一级) | 2013-06-25 15:42

@Smlusm: DelegateCommand是注册了CanExecuteChanged事件,当事件触发才会调用CanExecute。所以可能需要手动调用了http://www.silverlightchina.net/html/tips/2012/0209/13662.html

WuRang | 园豆:1730 (小虾三级) | 2013-06-25 15:49

@WuRang: 上午找资料时也有看到这篇文章,呵呵。。看来只能这样了,谢谢啦,就此结贴吧

WSIDFU | 园豆:183 (初学一级) | 2013-06-25 15:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册