Как вызвать метод в XAML из MainWindow? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь вызвать метод в MainWindow.xaml из MainWindow.xaml.cs. Я нигде не могу найти, как это будет работать.

Скажем, например, у меня есть привязка клавиш в моем коде xaml, и я хочу, чтобы при нажатии CTRL + E вызывался MethodIWantToCall.

<Page x:Class="Example"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Example"
      mc:Ignorable="d">
<Page.InputBindings>
        <KeyBinding Command="{Binding MethodIWantToCall}" Gesture="Ctrl+E"/>
</Page.InputBindings>
</Page>
public partial class Example : Page
{
    public Example()
    {
        InitializeComponent();
    }

    public void MethodIWantToCall()
    {
        //Body
    }
}

Конечно, когда я запускаю код и нажимаю Ctrl + E, ничего не происходит. Если я помещу Метод в другой класс, он будет работать, но в моей ситуации мне нужна эта страница, за которой находится xaml.

1 Ответ

0 голосов
/ 28 апреля 2020

Команды - это не просто методы, а классы. В частности, они являются экземплярами любого класса, который реализует интерфейс ICommand. Класс «command» имеет метод Execute, который фактически выполняет действие, а также необязательный CanExecute для определения возможности выполнения команды в данный момент.

Вот документация WPF по командам : Обзор команд .

Основное внимание уделяется RelayCommand, который представляет собой реализацию команд WPF, которая функционирует аналогично RoutedEvent с. Альтернативой является использование «RelayCommand» (он же «DelegateCommand»). RelayCommand на самом деле не является частью какой-либо стандартной библиотеки. NET, но это простой, часто используемый класс. Это можно найти в этом ответе .

Вот вопрос, который обсуждает, когда / почему можно использовать RoutedCommand вместо RelayCommand или наоборот: WPF ICommand против RoutedCommand . Я лично использовал оба в разное время.

Подводя итог: вам нужно определить пользовательскую команду в Example, которая при выполнении вызовет MethodIWantToCall. Реализация будет отличаться в зависимости от того, выберете ли вы RelayCommand или RoutedCommand.

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