我正在尝试从MainWindow.xaml.cs调用MainWindow.xaml中的方法。 我在任何地方都找不到它将如何工作。
例如,假设我的xaml代码中包含KeyBinding,并且我想在按下CTRL + E时按下// comments omitted
[HttpGet("{seasonKey}")]
[ProducesResponseType(typeof(See2Season), 200)]
public async Task<IActionResult> GetSeasonByKeyAsync(
string seasonKey,
[FromQuery(Name = "provider")] string providers,
[FromQuery(Name = "lang")] string languages,
[FromQuery(Name = "priority")] string priority)
{
var sanitizedSee2Params = ParametersHelper.ProcessAndSanitizeSee2InputParams(
this._logger,
true,
new KeyValuePair<string, string>(InputParameterNames.PROVIDERS, providers),
new KeyValuePair<string, string>(InputParameterNames.LANGUAGE, languages),
new KeyValuePair<string, string>(InputParameterNames.PRIORITY, priority));
var result = await this._seasonManager.GetSeasonByKeyAsync(
seasonKey,
sanitizedSee2Params).ConfigureAwait(false);
return this.Ok(result);
}
// comments omitted
[HttpGet("{seasonKey}/children")]
[ProducesResponseType(typeof(IEnumerable<See2Content>), 200)]
public async Task<IActionResult> GetSeasonChildrenByKeyAsync(
string seasonKey,
[FromQuery(Name = "overrideDefaultDirection")] bool overrideDefaultDirection,
[FromQuery(Name = "provider")] string providers,
[FromQuery(Name = "lang")] string languages,
[FromQuery(Name = "priority")] string priority)
{
var sanitizedSee2Params = ParametersHelper.ProcessAndSanitizeSee2InputParams(
this._logger,
true,
new KeyValuePair<string, string>(InputParameterNames.PROVIDERS, providers),
new KeyValuePair<string, string>(InputParameterNames.LANGUAGE, languages),
new KeyValuePair<string, string>(InputParameterNames.PRIORITY, priority));
var result = await this._seasonManager.GetSeasonChildrenByKeyAsync(
seasonKey,
overrideDefaultDirection,
sanitizedSee2Params).ConfigureAwait(false);
return this.Ok(result);
}
被调用。
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>
当然,当我运行代码并按Ctrl + E时,将不会发生任何事情。 如果我将Method放在其他类中会起作用,但是在我的情况下,我需要将它作为xaml后面的Page。
答案 0 :(得分:0)
命令不仅仅是方法,它们实际上是类。具体来说,它们是实现ICommand
接口的任何类的实例。 “命令”类具有一个Execute
方法(实际上可以执行该操作),以及一个可选的CanExecute
来确定当前是否可以执行该命令。
这是有关以下命令的WPF文档:Commanding Overview。
这主要集中在RelayCommand
上,它是WPF命令的实现,其功能与RoutedEvent
相似。另一种选择是使用“ RelayCommand”(也称为“ DelegateCommand”)。 RelayCommand实际上不是任何标准.NET库的一部分,但它是一个简单的常用类。您可以在this answer中找到它的隐含内容。
这里是一个问题,讨论了何时/为何在RoutedCommand
上使用RelayCommand
,反之亦然:WPF ICommand vs RoutedCommand。我在不同的时间都亲自使用过。
总结:您需要在Example
中定义一个自定义命令,该命令在执行时将调用MethodIWantToCall
。实现方式会有所不同,具体取决于您选择使用RelayCommand
还是RoutedCommand
。