2013-02-27 84 views
3

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

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

的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; 
} 

我注意到,模板具有RaiseCanExecuteChanged()在DelegateCommand.cs拼错RasieCanExecuteChanged()和改变了。我可以通过删除RaiseCanExecuteChanged()和修改

public event Handler CanExecuteChanged; 

来得到它的所有工作:

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

不过,我想知道这种情况的妥善解决是什么,为什么模板doesn`工作。我错过了什么,做错了什么?请创建一个新的解决方案,并使用我所做的模板,并告诉我发生了什么!谢谢!

+0

作者回应并发布了这个内置的模板修复版本4.1,修复了问题 – 2013-03-01 13:28:11

回答

0

作者昨天解决了该问题并发布了该模板的4.1版。

+0

是的,当他修复它并发邮件给我说感谢指出这一点 – 2013-05-31 13:09:03