代码之家  ›  专栏  ›  技术社区  ›  Nathan W

RelayCommand not firing on menuitem单击wpf mvvvm

  •  2
  • Nathan W  · 技术社区  · 15 年前

    我的wpf表单上有一个菜单项,它运行一个导入例程,我已经将command属性绑定到视图模型中的一个i command属性,但是由于某种原因,该方法不会被激发。

    这是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 回复  |  直到 15 年前
        1
  •  4
  •   Tim Erickson    15 年前

    将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”内容隐式创建父文件menuitem的子menuitem。此子菜单项没有定义命令属性,因此无法执行。显然,在父菜单项上定义的命令的可执行性被子菜单扩展功能覆盖。