Кроме команд есть еще один способ, который позволяет вам вызывать метод напрямую из XAML. Обычно он не используется, но опция все еще там.
Метод должен иметь один из двух типов подписей
- void Foo ()
- void Bar (отправитель объекта, EventArgs e)
Чтобы это работало, вы должны включить ссылки и пространства имен 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");
}