在Windows Phone 8中没有使用MVVM和Autofac更新按钮

时间:2013-12-19 07:47:22

标签: c# mvvm windows-phone-8 autofac

我正在构建一个基于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)之前对我有用。

任何帮助?

由于

1 个答案:

答案 0 :(得分:1)

在DelegateCommand类中,您有一个CanExecuteChanged事件,就像您在ViewModel基础中使用RaisePropertyChanged方法启动PropertyChanged一样,您需要在DelegateCommand类中执行RaiseCanExecuteChanged方法,以便在更改时启动CanExecuteChanged事件条件...

在WPF中,我们有一个CommandManager,它为我们完成这项工作,而无需启动事件。在Windows Phone中,我们需要启动该事件。这不是autofac或DI问题,命令可以在Silverlight / Windows Phone中执行。

希望这有帮助!