Soru Düğme tıklama etkinliğine parametre ekle


Böyle bir wpf düğmesine sahibim:

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

Ve geçmek istiyorum {Binding Code} button1_click işleyicisine parametre olarak geçirilir.
Bunun için nasıl giderim?

Feragatname: WPF'ye gerçekten yeni


44
2018-01-05 14:12


Menşei




Cevaplar:


Basit bir çözüm:

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

İşleyicinizde sender itiraz etmek Button ve erişmek Tag özelliği:

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

Daha şık bir çözüm kullanmak WPF'nin komut deseni: Düğmenin gerçekleştirmesini istediğiniz işlevsellik için bir Komut oluşturun, Komutu, Button'a bağlayın. Command özellik ve bağlamak CommandParameter senin değerine.


97
2018-01-05 14:18



Etiket şimdilik yapılacak ve daha karmaşık senaryolar için komut modeline bakacağım. Teşekkürler - Boris Callens
Hakkında ipucu +1 CommandParameter - Jim Counts
@Heinzi Teşekkürler - Andrei


Ben aşırı derecede 'Tag' hayranı değilim, belki de

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

Sonra Öznitelikler üzerinden erişim.

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

16
2017-09-28 09:44





Peki bunu yapmanın iki yolu vardır:

DataContext'i yayınlama

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

Veya genel bir özellik özelliği olan Etiket özelliğini kullanın

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

sonra

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

8
2018-01-05 14:19



Kullanmak istiyorum (Button)sender yerine sender as Button. Olası olmayan durumda sender bir düğme değil (Button)sender InvalidCastException atar, böylece hatayı bulmanıza yardımcı olur. Diğer taraftan, kodunuz sessizce ayarlanacak button Bu durumda null, daha sonra bir NullReferenceException neden olur. - Heinzi


Xaml ve DataContext kullanarak

<?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>

Ve MainPage Kodu Behing, bu kod örneği argüman olarak sayfa türünü kullanarak başka bir sayfaya gitmek için, burada "YourPageTypeHere" ve referans sayfa yapmak gerekir.

Ardından kodu 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; }
    }
}

Ayrıca, App sınıfınızda, Gezinme AnaSayfaında bir NavigationPage Örneğine gereksiniminiz var (Bu örnekte)

public App ()
        {
            InitializeComponent();

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

Bu xamarin formları içindir, Ancak WPF Projeleri için benzer.

Komut WPF ve Xamarin ile değiştirilebilir: "https://stackoverflow.com/a/47887715/8210755"


0
2018-06-29 16:25