我正在构建一个基于MVVM的小应用程序,并使用Autofac作为依赖注入器。
我创建了所有ViewModel所依赖的VMBase,我也使用VMLocator来注入所有依赖项(如前所述使用Autofac)。
public class VMLocator
{
IContainer container;
public VMLocator()
{
var builder = new ContainerBuilder();
builder.RegisterType<VMRetrieveInfo>();
container = builder.Build();
}
public VMRetrieveInfo RetrieveInfoViewModel
{
get { return container.Resolve<VMRetrieveInfo>(); }
}
}
有一个DelegateCommand类来处理CanExecute的引发:
public void RaiseCanExecuteChanged()
{
if (this.CanExecuteChanged != null)
this.CanExecuteChanged(null, new EventArgs());
}
当我尝试使用一个使用CanExecute方法更改其状态的DelegateCommand类放置一个按钮时出现问题,该方法返回一个当我按下另一个按钮时更改的变量。 更改变量的值似乎没有启动任何更改CanExecute结果的事件(甚至没有调用CanExecute方法)而且我很丢失。
public ICommand NavigateCommand
{
get { return navigateCommand; }
}
public void NavigateCommandExecute()
{
}
public bool NavigateCommandCanExecute()
{
return canCallWS;
}
在没有依赖注入的情况下运行类似的应用程序(Autofac)之前对我有用。
任何帮助?
由于
答案 0 :(得分:1)
在DelegateCommand类中,您有一个CanExecuteChanged事件,就像您在ViewModel基础中使用RaisePropertyChanged方法启动PropertyChanged一样,您需要在DelegateCommand类中执行RaiseCanExecuteChanged方法,以便在更改时启动CanExecuteChanged事件条件...
在WPF中,我们有一个CommandManager,它为我们完成这项工作,而无需启动事件。在Windows Phone中,我们需要启动该事件。这不是autofac或DI问题,命令可以在Silverlight / Windows Phone中执行。
希望这有帮助!