c# - 如何从 MainWindow 调用 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
接口的任何类的实例。“命令”类有一个Execute
方法,它实际上执行操作,以及一个可选CanExecute
的,用于确定命令当前是否能够执行。
这是关于命令的 WPF 文档:Commanding Overview。
这主要关注RelayCommand
哪个是 WPF 实现的命令,其功能类似于RoutedEvent
s。另一种方法是使用“RelayCommand”(又名“DelegateCommand”)。RelayCommand 实际上不是任何标准 .NET 库的一部分,但它是一个简单、常用的类。你可以在这个答案中找到它的暗示。
这是一个讨论何时/为什么可以使用RoutedCommand
overRelayCommand
或反之亦然的问题:WPF ICommand vs RoutedCommand。我个人在不同的时间都使用过。
总结一下:您需要定义一个自定义命令,在Example
该命令中执行时将调用MethodIWantToCall
. 根据您选择使用RelayCommand
还是RoutedCommand
.
推荐阅读
- vb.net - 抛出异常:Microsoft.VisualBasic.dll 中的“System.ArgumentException”尝试删除空文件夹时
- javascript - 显示自上次 ajax 调用以来的时间
- java - 该请求未指定任何 Android 软件包名称或签名证书指纹
- google-sheets - 有没有办法在单元格中使用查询功能时创建多个过滤器?
- javascript - 正确转义 javascript 对象
- python - 微宏和加权平均都具有相同的精度、召回率、f1-score
- c# - Gremlin .Net,按包含值的属性过滤顶点
- unit-testing - vue 如何模拟我的外部服务类
- c# - 单元测试应该测试方法的功能吗?
- shiny - Rhsiny:根据更新的 rhandsontable 对象自动更新输出对象