【问题标题】:Using VS2010 online template "WPF MVVM project template", CanExecuteChanged not working?使用VS2010在线模板“WPF MVVM项目模板”,CanExecuteChanged不起作用?
【发布时间】:2013-02-27 19:32:57
【问题描述】:

我通过 Online Templates->WPF in VS2010->WPF MVVM 项目模板创建了一个新的 WPF MVVM 应用程序。我创建了一个标有“刷新已启用?”的复选框。在“刷新”按钮旁边,我想在单击时启用/禁用“刷新”按钮。我将复选框的IsChecked 属性绑定到我称为CanRefreshDateaMainWindowViewModel 属性,并在其设置器中引发RaisePropertyChanged(()=>CanRefreshDate);。同样在MainWindowViewModel 中,我添加了我新创建的CanExecuteRefreshDate(),它返回CanRefreshDate 属性的布尔值。但是,当我单击复选框时,“刷新”按钮永远不会启用/禁用以匹配。解决此问题的正确方法是什么,这是模板中的疏忽还是什么?

这是我对模板代码的修改:

Xaml:

<CheckBox Content="Refresh Enabled?" 
          IsChecked="{Binding CanRefreshDate}"/>

MainWindowViewModel.cs:

private bool _CanRefreshDate;
public bool CanRefreshDate
{
    get { return _CanRefreshDate; }
    set
    {
        if (_CanRefreshDate != value)
        {
            _CanRefreshDate = value;
            RaisePropertyChanged(() => CanRefreshDate);
        }
    }
}

public ICommand RefreshDateCommand { get { return new DelegateCommand(OnRefreshDate, CanExecuteRefreshDate); } }

private bool CanExecuteRefreshDate()
{
    return CanRefreshDate;
}

我注意到模板在 DelegateCommand.cs 中有 RaiseCanExecuteChanged() 拼写错误 RasieCanExecuteChanged() 并更改了它。我能够通过删除 RaiseCanExecuteChanged() 并修改

public event Handler CanExecuteChanged;  

到:

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

但是,我想知道什么是正确的解决方案,以及为什么模板不起作用。我错过了什么,做错了什么还是什么?请创建一个新的解决方案并使用我所做的模板并告诉我发生了什么!谢谢!

【问题讨论】:

  • 作者回复并发布了此内置模板的 4.1 版本,修复了该问题

标签: wpf templates mvvm canexecute


【解决方案1】:

作者修复了这个问题,昨天发布了4.1版的模板。

【讨论】:

  • 是的,他在修复它时给我发了电子邮件,并表示感谢您指出这一点
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2011-05-19
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多