如何在WPF中调用XAML的调用方法?

时间:2010-02-02 17:59:05

标签: wpf xaml

如何在WPF中调用XAML的调用方法?

3 个答案:

答案 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调用方法。它不常用,但选项仍然存在。

该方法必须具有两种签名之一

  • void Foo()
  • void Bar(对象发送者,EventArgs e)

要使其工作,必须在项目中包含Microsoft.Expression.InteractionsSystem.Windows.Interactivity的引用和名称空间。最简单的方法是安装nuget.。在下面的示例中,命名空间定义为xmlns:ixmlns: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");

}