【发布时间】:2011-12-03 08:19:00
【问题描述】:
我的代码大致如下:
<MenuItem Header="Do Something"
Command="{Binding ChangeSomeEnumValue}"
CommandParameter="{x:Static someNamespace:SomeEnum.EnumValue}" />
在用作DataContext的viewmodel中:
// RelayCommand takes an Action<object> to be used by Execute, and a
// Predicate<object> to be used by CanExecute.
this.ChangeSomeEnumValue = new RelayCommand(
p => this.CurrentEnumValue = (SomeEnum)p,
ChangeSomeEnumValuePredicate);
...
bool ChangeSomeEnumValuePredicate(object commandParameter)
{
Console.WriteLine(commandParameter);
var enumValue = (SomeEnum)commandParameter;
...
return true;
}
当MenuItem首次显示时,输出为:
EnumValue
EnumValue
EnumValue
当我点击MenuItem 时,“EnumValue”又打印了 3 次,然后我在var enumValue = (SomeEnum)commandParameter 行上得到一个NullReferenceException(commandParameter 为空)。
我这辈子都想不出为什么CommandParameter 在前几次CanExecute 被调用时是正确的,但在另一个时候null 是正确的。这是怎么回事?
【问题讨论】:
标签: c# .net wpf command relaycommand