WPF->WPF MVVM项目模板创建了一个新的WPF MVVM应用程序。我创建了一个标记为“刷新已启用?”的复选框。在“刷新”按钮旁边,我想在单击时启用/禁用“刷新-6ren">
gpt4 book ai didi

wpf - 使用VS2010在线模板 "WPF MVVM project template",CanExecuteChanged不起作用?

转载 作者:行者123 更新时间:2023-12-02 20:49:41 26 4
gpt4 key购买 nike

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

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

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 - 使用VS2010在线模板 "WPF MVVM project template",CanExecuteChanged不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com