如何在WPF中调用XAML的调用方法?
答案 0 :(得分:5)
处理此问题的典型方法是将您的方法包装到ICommand,并使用Commanding infrastructure in WPF。
我blogged about Commanding,展示了这种方法的一些优点,特别是在Josh Smith's MVVM article中使用类似RelayCommand实现的内容时。
答案 1 :(得分:0)
您可以创建继承ICommand的RelayCommand,然后创建ICommand的属性并将relay命令分配给该属性并调用该方法。
答案 2 :(得分:0)
除命令外,还有另一种方法可以让您直接从XAML调用方法。它不常用,但选项仍然存在。
该方法必须具有两种签名之一
要使其工作,必须在项目中包含Microsoft.Expression.Interactions
和System.Windows.Interactivity
的引用和名称空间。最简单的方法是安装nuget.。在下面的示例中,命名空间定义为xmlns:i
和xmlns:ei
。
<Window x:Class="Interactivity.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:local="clr-namespace:Interactivity"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button HorizontalAlignment="Center" VerticalAlignment="Center" Content="Run" IsEnabled="{Binding CanRun}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="VoidParameterlessMethod" TargetObject="{Binding}" />
<ei:CallMethodAction MethodName="EventHandlerLikeMethod" TargetObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public void VoidParameterlessMethod()
=> Console.WriteLine("VoidParameterlessMethod called");
public void EventHandlerLikeMethod(object o, EventArgs e)
=> Console.WriteLine("EventHandlerLikeMethod called");
}