RelayCommand不在MenuItem上触发单击WPF MVVM

时间:2009-12-21 22:35:44

标签: c# wpf mvvm menuitem

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

这是xaml:

<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);
            }
        }

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

感谢。

1 个答案:

答案 0 :(得分: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”内容隐式创建父FileItemItem的子MenuItem。这个子MenuItem没有定义Command属性,因此无法执行。显然,子菜单扩展功能会覆盖在父MenuItem上定义的Command的可执行性。