2

インポート ルーチンを実行する 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);
            }
        }

これは、フォームのすべてのボタンに使用したパターンですが、メニュー項目が機能しません。何か足りないものがありますか、それともメニュー項目を別の方法で行う必要がありますか?

ありがとう。

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 要素の「インポート」コンテンツは、親 File MenuItem の子 MenuItem を暗黙的に作成します。この子 MenuItem には Command プロパティが定義されていないため、実行できません。親 MenuItem で定義された Command の実行可能性は、サブメニュー展開機能によってオーバーライドされるようです。

于 2009-12-22T01:24:27.803 に答える