마크 업에서 선언 되었는데도 CommandParameter가 때때로 (항상 그런 것은 아님) null 인 이유는 무엇입니까?
다음과 비슷한 코드가 있습니다.<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
는 null 임).
나 인생의 이유로 CommandParameter
가 처음 몇 번 CanExecute
이 올바르다는 이유를 생각할 수는 없지만 null
은 나중에 호출됩니다. 여기서 무슨 일이 일어나고있는거야?
두 번째 링크가 나는 데 같은 문제가 나타납니다. WPF 자체의 버그 인 것 같습니다. 'commandParameter'가'null' 일 때'false'를 반환함으로써이 문제를 해결할 수 있었지만 귀하의 마일리지는 다를 수 있습니다. –
예. 그것은 버그입니다. 내 문제를 버튼 목록으로 줄였습니다. 그것은 그 목록 주위에 원본 페이지를 구축하는 것을 쳐다 보았다. 나는 그것을 완전히 만들었고 지금은 효과가있다. 원래보기와 똑같은 문자의 XAML 문자입니다. 이것은 가장 확실한 버그입니다. 내가보고 할 재현 가능한 증거가 있었으면 좋겠다. 이들은 결코 해결되지 않는 버그 유형입니다. – Jordan