Реализовать предопределенную команду Open в WPF - PullRequest
0 голосов
/ 12 декабря 2018

как мне связать мою собственную написанную команду Open с именем MyOpenCommand в MyOpenCommand.cs с предопределенной командой Open, предоставляемой WPF?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace DokumentViewerSample.Commands
{
    class MyOpenCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            //Some opening logic!
        }
    }
}

Обычно я создаю ссылку в Window.Resources, определяющую ключ, например:

 <Window.Resources>
       <local:MyOpenCommand x:Key="cmd1" />
    </Window.Resources>

, и, наконец, связываю команду с атрибутом command элемента управления.

Но как я могу использовать предопределенную команду Open?Я знаю, что я могу определить BindingResources.Что-то вроде:

 <Window.CommandBindings>
        <CommandBinding Command="Open" CanExecute="Some_Handler"
                            Executed="Some_Handler2"></CommandBinding>
 </Window.CommandBindings>

Но здесь я бы создал методы обратного вызова в файле MainWindow.xaml.cs, и у меня возникло ощущение, что это неправильно.

Я был бы очень благодаренЕсли бы вы могли показать мне лучшую версию практики (:

Спасибо за ваше время!

1 Ответ

0 голосов
/ 12 декабря 2018

Если я хочу использовать команду из элемента управления, я обычно определяю ее в представлении Модель.

public class ViewModel
{
    public MyOpenCommand MyCommand { get; set; } = new MyOpenCommand();
//...

И затем устанавливаю представление Модель

public MainWindow()
{
        InitializeComponent();

        DataContext = new ViewModel();            
 }

Чем явозможность установить привязку команд следующим образом:

<Grid>
    <Button Content="Open" Command="{Binding MyCommand}"></Button>
</Grid>

Кстати, для этого класс MyOpenCommand должен быть общедоступным.

Если вы хотите использовать CommandBindings, возможно, смотрите статью Мэтта Гамильтона оэто: matthamilton.net / commandbindings-with-mvvm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...