我使用的約什 - 史密斯RelayCommand類在WPF MVVM應用程序爲我的ViewModel裏面創建我的命令結合RelayCommand CanExecute:菜單項可視性與參數
例如:
ICommand RemoveAllCommand = new RelayCommand<object>(OnRemoveAll, CanRemoveAll);
我打電話這從文本菜單命令:
<ContextMenu x:Key="MyContextMenu" DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Remove All" Command="{Binding Path=DataContext.RemoveAllCommand,
RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}" CommandParameter="{Binding Path=.Header}" />
一切正常,只是我的菜單項的仍然是可見的,但殘疾人,我想設置的知名度,所以暈倒第在繼電器命令中的CanExecute
返回false時,我的MenuItem不顯示。
我試圖設置一個綁定到Visibility屬性,但我不知道如何綁定到我的CanRemoveAll(object obj)
方法的參數。我也想過使用DataTrigger,但我不知道如何去做。
這是我CanRemoveAll
方法在視圖模型:
public bool CanRemoveAll(object param)
{
GoldTreeNodeViewModel gtn = param as GoldTreeNodeViewModel;
return (gtn != null && gtn.Children != null && gtn.Children.Count > 0);
}
從RelayCommand類:
public event EventHandler CanExecuteChanged
{
add
{
if (_canExecute != null)
CommandManager.RequerySuggested += value;
}
remove
{
if (_canExecute != null)
CommandManager.RequerySuggested -= value;
}
}
[DebuggerStepThrough]
public Boolean CanExecute(Object parameter)
{
return _canExecute == null ? true : _canExecute((T) parameter);
}
任何幫助將高度讚賞,
您能否在VM中顯示CanRemoveAll的代碼,以及您從哪裏提出CanExecuteChanged。 – ethicallogics 2013-02-10 13:03:18
只需將該信息添加到問題中。此外,我並不是在任何地方顯式提高CanExecuteChanged,我認爲'RelayCommand'和WPF內部負責就我所知。 – 2013-02-10 13:24:58