Как мне вызвать метод вызова из XAML в WPF? - PullRequest
4 голосов
/ 02 февраля 2010

Как мне вызвать метод вызова из XAML в WPF?

Ответы [ 3 ]

5 голосов
/ 02 февраля 2010

Типичный способ, которым это обрабатывается, заключается в том, чтобы обернуть ваш метод в ICommand и использовать инфраструктуру Commanding в WPF .

Я написал в блоге о Командовании , показывая некоторые преимущества этого подхода, особенно когда вы используете что-то вроде реализации RelayCommand в Статья Джоша Смита о MVVM .

0 голосов
/ 15 марта 2019

Кроме команд есть еще один способ, который позволяет вам вызывать метод напрямую из 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");

}
0 голосов
/ 22 мая 2017

Вы можете создать RelayCommand, наследующий ICommand, а затем создать свойство ICommand, назначить команду relay этому свойству и вызвать метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...