सवाल बटन क्लिक घटना में पैरामीटर जोड़ें


मेरे पास इस तरह एक wpf बटन है:

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

और मैं पास करना चाहता हूँ {Binding Code} बटन 1_क्लिक हैंडलर पर पैरामीटर के रूप में पारित किया गया।
यह कैसे करना है?

अस्वीकरण: वास्तव में WPF के लिए नया


44
2018-01-05 14:12


मूल




जवाब:


सरल समाधान:

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

अपने हैंडलर में, कास्ट करें sender करने के लिए वस्तु Button और उपयोग करें Tag संपत्ति:

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

एक और सुरुचिपूर्ण समाधान का उपयोग करना होगा डब्ल्यूपीएफ का कमांड पैटर्न: कार्यक्षमता के लिए एक कमांड बनाएं जिसे आप बटन करना चाहते हैं, बटन को कमांड को बाध्य करें Command संपत्ति और बांधना CommandParameter आपके मूल्य के लिए।


97
2018-01-05 14:18



टैग अब और अधिक जटिल परिदृश्यों के लिए करेगा, मैं कमांड पैटर्न को देखूंगा। धन्यवाद - Boris Callens
के बारे में संकेत के लिए +1 CommandParameter - Jim Counts
@ हिनजी धन्यवाद - Andrei


मैं शायद 'टैग' के प्रशंसक नहीं हूं

<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()
 }

16
2017-09-28 09:44





वैसे यह करने के दो तरीके हैं:

DataContext कास्ट करें

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

या टैग संपत्ति का उपयोग करें जो एक सामान्य राज्य संपत्ति है

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

8
2018-01-05 14:19



मै इस्तेमाल करूंगा (Button)sender के बजाय sender as Button। असंभव मामले में sender एक बटन नहीं है (Button)sender एक अवैधCastException फेंक देगा, जिससे आपको त्रुटि खोजने में मदद मिलेगी। दूसरी ओर, आपका कोड चुपचाप सेट करेगा button उस मामले में शून्य करने के लिए, बाद में एक NullReferenceException का कारण बनता है। - Heinzi


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>

और मेनपेज कोड बीइंग, यह कोड उदाहरण पृष्ठ प्रकार का उपयोग तर्क के रूप में किसी अन्य पृष्ठ पर नेविगेट करना है, आपको यहां "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; }
    }
}

इसके अलावा आपकी ऐप क्लास में नेविगेट करने के लिए मेनपेज में नेविगेशन पेज का एक उदाहरण चाहिए (इस उदाहरण के लिए)

public App ()
        {
            InitializeComponent();

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

यह xamarin रूपों के लिए है, लेकिन यह डब्ल्यूपीएफ परियोजनाओं के लिए समान है।

WPF और Xamarin के लिए कमांड बदल दिया जा सकता है: "https://stackoverflow.com/a/47887715/8210755"


0
2018-06-29 16:25