2

我的 WPF 表单上有运行导入例程的菜单项,我已将命令属性绑定到视图模型中的 ICommand 属性,但由于某种原因,该方法不会触发。

这是xml:

<Menu Height="21"
              Margin="0,-2,0,0"
              VerticalAlignment="Top"
              Grid.ColumnSpan="2">
            <MenuItem Header="File" Command="{Binding ImportFileCommand}">Import</MenuItem>
</Menu>

这是在我的视图模型中:

        private ICommand importfilecommand;
        public ICommand ImportFileCommand
        {
            get
            {
                if (this.importfilecommand == null)
                {
                    this.importfilecommand =  new RelayCommand(parm => ImportFile());
                }
                return this.importfilecommand;
            }
        }

        private void ImportFile()
        {

            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "Tab Files (*.tab)|*.tab*";

            if (dialog.ShowDialog() == true)
            {
            //    MessageBox.Show(dialog.FileName);
            }
        }

这是我用于表单上所有按钮的模式,但菜单项不起作用。我错过了什么还是菜单项必须以不同的方式完成?

谢谢。

4

1 回答 1

4

将您的 XAML 更改为

<Menu Height="21" Margin="0,-2,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2">
    <MenuItem Header="File">
        <MenuItem Header="Import" Command="{Binding ImportFileCommand}" />
    </MenuItem>
</Menu>

在您的示例中,MenuItem 元素的“Import”内容隐式地创建了父 File MenuItem 的子 MenuItem。此子 MenuItem 未定义 Command 属性,因此无法执行。显然,父 MenuItem 上定义的命令的可执行性被子菜单扩展功能覆盖。

于 2009-12-22T01:24:27.803 回答