将参数添加到按钮单击事件

时间:2010-01-05 14:12:59

标签: c# wpf .net-3.5 button click

我有一个像这样的wpf按钮:

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

我想将{Binding Code}作为参数传递给button1_click处理程序 我该怎么做?

免责声明:对WPF来说真的很新

4 个答案:

答案 0 :(得分:107)

简单的解决方案:

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

在您的处理程序中,将sender对象强制转换为Button并访问Tag属性:

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

更优雅的解决方案是使用Command pattern of WPF:为您希望按钮执行的功能创建命令,将Command绑定到Button的Command属性并绑定{{1}你的价值。

答案 1 :(得分:16)

我并不是'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()
 }

答案 2 :(得分:10)

有两种方法可以做到这一点:

投射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;
}

答案 3 :(得分:0)

使用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; }
    }
}

在您的App类中,还需要MainPage中的NavigationPage实例进行导航(对于此示例)

public App ()
        {
            InitializeComponent();

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

它是用于xamarin形式的,但是对于WPF项目却是类似的。

可以使用WPF和Xamarin更改命令:“ https://stackoverflow.com/a/47887715/8210755