WPF:如何启用命令?

时间:2011-02-28 14:12:38

标签: c# wpf

我不知道为什么只有在ListView中选择了一个项目时才启用我的上下文菜单中的Add项目。有谁知道为什么?

这是我的XAML代码

    <Window x:Class="Vokabular1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid HorizontalAlignment="Stretch" Name="grid" VerticalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <ListView Grid.Column="0" HorizontalAlignment="Stretch" Margin="10,10,10,10" Name="listView" VerticalAlignment="Stretch">
                <ListView.View>
                    <GridView />
                </ListView.View>
                <ListView.CommandBindings>
                    <CommandBinding Command="New" 
                        Executed="CommandBinding_Executed" 
                        CanExecute="CommandBinding_CanExecute" />
                </ListView.CommandBindings>
                <ListView.ContextMenu>
                    <ContextMenu>
                        <MenuItem Name="Add" Header="_Add"    Command="New" />
                        <MenuItem Header="Delete" Command="Delete" IsEnabled="True" />
                    </ContextMenu>
                </ListView.ContextMenu>
                <ListViewItem />  
            </ListView>            
        </Grid>
    </Grid>
</Window>

窗口的方法是:

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("ok");
}

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
    e.Handled = true;
}

1 个答案:

答案 0 :(得分:5)

要调用CommandBinding.CanExecute需要重点关注。由于选择ListView中的项目会强制重点转移到ListView;评估可以进行。

如果您要在listView.Focus();构造函数中放置Window,您会注意到CommandBinding.CanExecute现在按预期调用,因此在{{1}内未包含或选择项目的情况下启用}}

将绑定移至ListView仍需要将焦点设置在Window之内;通过构造函数中的显式调用或通过其他方式;例如:在WindowListView中可以获得焦点的其他控件中选择一个项目。