Добавить параметр в событие нажатия кнопки - PullRequest
47 голосов
/ 05 января 2010

У меня есть кнопка wpf, как это:

<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>

И я хочу передать {Binding Code} переданный в качестве параметра в обработчик button1_click.
Как мне это сделать?

Отказ от ответственности: действительно новый для WPF

Ответы [ 4 ]

109 голосов
/ 05 января 2010

Простое решение:

<Button Tag="{Binding Code}" ...>

В вашем обработчике приведите объект sender к Button и получите доступ к свойству Tag:

var myValue = ((Button)sender).Tag;

Более элегантным решением было бы использование шаблона команды WPF : создайте команду для функции, которую вы хотите выполнить для кнопки, привязайте команду к свойству Command кнопки и привяжите CommandParameter к вашему значению.

16 голосов
/ 28 сентября 2012

Я не слишком фанат 'Tag', так что, возможно

<Button Click="button1_Click" myParam="parameter1" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>

Затем доступ через атрибуты.

 void button1_Click(object sender, RoutedEventArgs e)
 {
    var button = sender as Button;
    var theValue = button.Attributes["myParam"].ToString()
 }
10 голосов
/ 05 января 2010

Ну, есть два способа сделать это:

Приведите DataContext

 void button1_Click(object sender, RoutedEventArgs e)
 {
    var button = sender as Button;
    var code = ((Coupon)button.DataContext).Code;
 }

Или используйте свойство Tag, являющееся универсальным государственным свойством

 <Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Tag="{Binding Code}" />

тогда

void button1_Click(object sender, RoutedEventArgs e)
{
    var button = sender as Button;
    var code = button.Tag;
}
0 голосов
/ 29 июня 2018

Использование Xaml и DataContext

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:DataAndCloudServices"
             x:Class="DataAndCloudServices.MainPage" >

    <StackLayout>
        <!-- Command Implemented In Code Behing -->
        <Button Text="Consuming Web Services Samples" 
                Command="{Binding NavigateCommand}" 
                CommandParameter="{x:Type local:YourPageTypeHere}" >

        </Button>
    </StackLayout>
</ContentPage>

И код MainPage Behing, этот пример кода предназначен для перехода на другую страницу с использованием типа страницы в качестве аргумента, вам нужно сделать «YourPageTypeHere» и страницу ссылки здесь.

Затем реализовать код позади.

using System;
using System.Windows.Input;
using Xamarin.Forms;

namespace DataAndCloudServices
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            NavigateCommand = new Command<Type>(
              async (Type pageType) =>
              {
                  Page page = (Page)Activator.CreateInstance(pageType);
                  await Navigation.PushAsync(page);
              });

            this.BindingContext = this;
        }
        public ICommand NavigateCommand { private set; get; }
    }
}

Также в вашем классе приложения необходим экземпляр NavigationPage в MainPage для навигации (для этого примера)

public App ()
        {
            InitializeComponent();

            MainPage = new NavigationPage(new MainPage());
        }

Это для форм xamarin, но аналогично для проектов WPF.

Команду можно изменить для WPF и Xamarin: "https://stackoverflow.com/a/47887715/8210755"

...