【发布时间】:2011-08-17 17:37:48
【问题描述】:
我正在使用 MVVM-Light,并且我的中继命令运行良好,我刚刚读到我应该实现 CanExecuteChanged 和 CanExecute。虽然我找不到一个很好的例子。
有没有人有一个很好的例子来说明如何实现这些。
CanExecute 需要在无法执行时返回 False 但不会只是禁用按钮??
什么时候执行CanExecuteChanged?
任何人都有任何关于何时使用每个项目的好例子,我的代码可以在没有 this blog 帖子的情况下工作,但我应该实现这些项目。
我有点困惑,正如我所说的,我认为我只需将 Enabled 属性或其他东西绑定到 ViewModel 中的属性,这样我就可以禁用按钮或类似控件?
如有任何帮助,将不胜感激。
编辑
这就是我现在所拥有的...它可以工作,但按钮实际上并未禁用,只有当我返回 false 时命令没有运行。我在构造函数中调用 CanExecuteMe 来强制 RaiseCanExecuteChanged 运行......
这在我的视图模型的构造器中运行
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;
}
这是我的 XAML
<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>
【问题讨论】:
标签: mvvm mvvm-light relaycommand canexecute