- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MVVM-Light 并且我的中继命令运行良好,我刚刚读到我应该实现 CanExecuteChanged
和 CanExecute
.虽然我找不到一个很好的例子。
有没有人有一个很好的例子来说明如何实现这些。
CanExecute 在无法执行时需要返回 False 但不会只是禁用按钮?
我什么时候执行 CanExecuteChanged
?
任何人都有任何关于何时使用每一个的好例子,我的代码没有但 this blog帖子指出我应该实现这些项目。
我有点困惑,正如我所说,我以为我会绑定(bind) Enabled
属性或 ViewModel 中的属性,以便我可以禁用按钮或类似控件?
任何有助于理解的帮助将不胜感激。
编辑
这就是我现在所拥有的......它可以工作,但按钮并没有物理禁用,只有命令没有运行,因为我返回错误。我在构造函数中调用 CanExecuteMe 以强制 RaiseCanExecuteChanged 运行...
这在我的 View 模型的构造器中运行
this.Page2Command = new RelayCommand(() => this.GoToPage2(), () => CanExecuteMe);
CanExecuteMe = false;
private bool _canIncrement = true;
public bool CanExecuteMe
{
get
{
return _canIncrement;
}
set
{
if (_canIncrement == value)
{
return;
}
_canIncrement = value;
// Update bindings, no broadcast
//RaisePropertyChanged(CanIncrementPropertyName);
Page2Command.RaiseCanExecuteChanged();
}
}
public RelayCommand Page2Command
{
get;
private set;
}
private object GoToPage2()
{
System.Windows.MessageBox.Show("Navigate to Page 2!");
return null;
}
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="31,77,0,0" x:Name="button1" VerticalAlignment="Top" Width="75" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Page2Command, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
最佳答案
当 Button 需要确定是否应该启用它时调用 CanExecute。
Button 在绑定(bind)时执行此操作,并且在每次 CanExecuteChanged 触发后(Button 监听此事件以获取其命令)。
所以,如果按钮应该被禁用,你应该触发 CanExecuteChanged,当按钮调用 CanExecute 时,你应该返回 false
.这是使用命令绑定(bind)时启用/禁用按钮的首选方法。
命令绑定(bind)使您能够将所有按钮逻辑封装在一个实例(命令)中。 CanExecute 方法应查询应用程序的当前状态以确定是否应启用或禁用按钮。通过这种封装,您可以减少 View Model 中的意大利面条式代码,这些检查在这里和那里和那里执行,我忘记了那里的那个。
关于mvvm - CanExecute 和 CanExecuteChanged,我必须用 RelayCommand 来实现这些吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5870247/
我可以使用 CanExecuteChanged 更改“可以执行”条件吗? 或者……它的用途是“什么”? 最佳答案 不,您不能使用它来更改可执行状态。它是参与ICommand 的事件和对象模式可以选择收
在我的 ViewModel 中,我有一个 ObservableCollection 的 Person 对象(实现了 INotifyPropertyChanged)和一个 SelectedPerson
我正在尝试 MVVM 模式基本级别,并在 ICommand CanExecute 更改时感到震惊。我有如下 XAML 绑定(bind): 命令: Public Class
我不知道如何使用 CanExecuteChangedEventManager在 MyCommand : ICommand 中。我尝试了以下但 value 是错误的类型: public event Ev
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
Icommand 包含两个方法和一个事件。 两个方法的作用很清楚,但是我无法理解ICommand中提供的事件是做什么的。 CanExecuteChanged 事件何时引发? 下面的解释在MSDN但是我
在我的 WPF UI 中,我使用了我在 xaml 中通过以下代码引用的 RoutedCommands: Command="viewModel:MessageListViewModel.DeleteMe
我从 Josh Smith 的 MVVM tutorial 得到以下代码. 任何人都可以快速解释这段代码的实际作用吗? public event EventHandler CanExecuteChan
我正在分析一个使用 Catel 作为 MVVM 框架的 WPF 应用程序,我已经看到在 ViewModel 中我有 2 个保留路径作为 现在我在附加到上下文菜单的行为中创建了这样的 RadMenuIt
我正在使用 MVVM-Light 并且我的中继命令运行良好,我刚刚读到我应该实现 CanExecuteChanged和 CanExecute .虽然我找不到一个很好的例子。 有没有人有一个很好的例子来
我的 Command-ViewModel 中是否缺少某些内容? public class Command : ICommand { public Command(Action
我想实现当文本框值更改时,我的添加按钮可用。 我将文本框与 viewModel 绑定(bind): 我的按钮: 在后面的 XAML 代码中,我将 DataContext 设置为我的 ViewMod
在用户进行一些修改后,我想从 DelegateCommand 重新触发 canExecute 功能。我该怎么做呢? 最佳答案 必须引发接口(interface) ICommand 的事件 CanExe
我给自己写了一个 SingleExecutionCommand(我还不确定那个名字。请随意推荐另一个,但这不是我的问题),它不允许在第一次执行之前再次按下按钮完成的。好吧,至少那是计划。 我想使用 C
我是一名优秀的程序员,十分优秀!