如何从主窗口调用 XAML 中的方法?



我正在尝试从MainWindow.xaml.cs调用MainWindow.xaml中的方法。 我在任何地方都找不到这将如何工作。

例如,假设我的 xaml 代码中有 KeyBinding,我希望在按下 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 后面的这个页面。

命令不仅仅是方法,它们实际上是类。具体来说,它们是实现ICommand接口的任何类的实例。"command"类有一个实际执行操作的Execute方法,以及一个可选CanExecute来确定命令当前是否能够执行。

下面是有关命令的 WPF 文档:命令概述。

这主要侧重于RelayCommand,它是命令的 WPF 实现,其功能类似于RoutedEvents。另一种方法是使用"RelayCommand"(又名"DelegateCommand")。RelayCommand 实际上不是任何标准 .NET 库的一部分,但它是一个简单的常用类。你可以在这个答案中找到它的暗示。

这里有一个问题,讨论何时/为什么可以使用RoutedCommand而不是RelayCommand反之亦然:WPF ICommand vs RoutedCommand。我个人在不同时间都使用过这两种方法。

总结一下:您需要在Example中定义一个自定义命令,该命令在执行时将调用MethodIWantToCall。实施将有所不同,具体取决于您是选择使用RelayCommand还是RoutedCommand

相关内容

最新更新