RelayCommand не стреляет по MenuItem нажмите WPF MVVM - PullRequest
2 голосов
/ 22 декабря 2009

В моей форме WPF есть пункт меню, в котором выполняется процедура импорта. Я связал свойство command со свойством 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 Ответ

4 голосов
/ 22 декабря 2009

Измените свой 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>

В вашем примере содержимое «Import» элемента MenuItem неявно создает дочерний MenuItem родительского файла MenuItem. Этот дочерний MenuItem не имеет определенного свойства Command и не может быть выполнен. Очевидно, что исполняемость Команды, определенной в родительском MenuItem, переопределяется функциональностью расширения подменю.

...