이것은 지금 며칠 동안 나를 미치게했습니다!WPF MenuItem Command.Executed가 실행되지 않지만 Command.CanExecute가 수행
명령의 실행 부분이 내 메뉴의 '1 단계'아래에서 실행되도록 할 수 없습니다. 'CanExecute'콜백은 항상 모든 메뉴 항목에서 호출되며 콜백은 항상 true를 반환하는 것을 볼 수 있습니다.
누군가 올바른 방향으로 나를 가리킬 수 있습니까? MyTypes : MyMenuDescriptorType에 ICommand의 구현을 추가 할 수 있다는 것을 알고 있습니다. 그러나 이것은 달성하려는 모델에 맞지 않습니다. 사전에
많은 감사
private void CreateActionCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
e.Handled = true;
}
private void CreateActionCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
Debug.WriteLine("This only happens on Level 1");
}
<UserControl.Resources>
<ResourceDictionary>
<RoutedUICommand x:Key="CreateAction" Text="CreateAction"/>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Menu>
<Menu.CommandBindings>
<CommandBinding Command="{StaticResource CreateAction}" Executed="CreateActionCommand_Executed" CanExecute="CreateActionCommand_CanExecute"/>
</Menu.CommandBindings>
<Menu.Resources>
<Style x:Key="MyMenuStyle" TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Description}"/>
<Setter Property="Command" Value="{StaticResource CreateAction}" />
<Setter Property="CommandParameter" Value="{Binding}"/>
<Setter Property="CommandTarget" Value="{Binding Path=., RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
</Style>
</Menu.Resources>
<MenuItem Header="Root Level">
<MenuItem Header="Level 1" ItemsSource="{Binding MyListOfThings}" ItemContainerStyle="{StaticResource MyMenuStyle}">
<MenuItem.Resources>
<HierarchicalDataTemplate
DataType="{x:Type MyTypes:MyMenuDescriptorType}"
ItemsSource="{Binding Path=Children}"
ItemContainerStyle="{StaticResource MyMenuStyle}"/>
</MenuItem.Resources>
</MenuItem>
</MenuItem>
</Menu>
</Grid>
업데이트 : 내가 잘못 무슨 일이 있었는지 밖으로 일 이후 있습니다. 내 간단한 예제에서는 'MyListOfThings'속성을 업데이트하지 않았습니다. 메뉴의 PreviewMouseLeftButtonDown 이벤트에서 'MyListOfThings'을 업데이트하면 컨트롤이 이상한 일을하고 명령이 실행되지 않습니다. 그러나 MouseOver 이벤트에서 속성을 업데이트하면 모든 것이 예상대로 작동합니다!
이유가 확실하지 않습니다. 아마도 누군가가 설명 할 수 있을까요?