相关文章推荐
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I have a wpf button like this:

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

And I want to pass {Binding Code} passed as parameter to the button1_click handler.
How do I go about this?

Disclaimer: really new to WPF

The tag will do for now and for more complicated scenarios I will look into the command pattern. Thanks – Boris Callens Jan 5, 2010 at 14:29

I'm not overly a fan of 'Tag' so perhaps

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

Then accessing via the Attributes.

 void button1_Click(object sender, RoutedEventArgs e)
    var button = sender as Button;
    var theValue = button.Attributes["myParam"].ToString()

Or use the Tag property which is a generic state property

 <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;
                I would use (Button)sender instead of sender as Button. In the unlikely case that sender is not a button, (Button)sender will throw an InvalidCastException, thereby helping you find the error. Your code, on the other hand, will silently set button to null in that case, causing a NullReferenceException later on.
– Heinzi
                Jan 6, 2011 at 21:36

Using Xaml and 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>

And MainPage Code Behing, this code example is to navigate to another page using the page type as argument, you need to make "YourPageTypeHere" and reference page here.

Then implement code Behind.

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

Also in your App class need a Instance of NavigationPage in MainPage to Navigate (For this example)

public App ()
    InitializeComponent();
    MainPage = new NavigationPage(new MainPage());

It is for xamarin forms, But It is similar for WPF Projects.

Command could be changed with for WPF and Xamarin: "https://stackoverflow.com/a/47887715/8210755"

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.

 
推荐文章