버튼 클릭 이벤트에 매개 변수 추가
다음과 같은 wpf 버튼이 있습니다.
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
그리고 나는 합격하고 싶다.{Binding Code}
button1_click 핸들러에 파라미터로 전달됩니다.
이거 어떻게 해야 되지?
면책사항: WPF의 새로운 기능
심플한 솔루션:
<Button Tag="{Binding Code}" ...>
핸들러로,sender
에 반대하다.Button
에 액세스 합니다.Tag
속성:
var myValue = ((Button)sender).Tag;
보다 우아한 해결책은 WPF의 명령어 패턴을 사용하는 것입니다.버튼이 실행하는 기능에 대해 명령어를 만들고, 명령어를 버튼에 바인드하는 것입니다.Command
속성과 바인드CommandParameter
고객의 가치를 높입니다.
저는 '태그'를 별로 안 좋아해서
<Button Click="button1_Click" myParam="parameter1" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
그런 다음 Attributes를 통해 액세스합니다.
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var theValue = button.Attributes["myParam"].ToString()
}
여기에는 두 가지 방법이 있습니다.
Data Context를 캐스트
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;
}
Xaml 및 Data Context 사용
<?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 Code Bheing에서는 이 코드 예는 페이지 유형을 인수로 사용하여 다른 페이지로 이동하기 위해 "MyPageTypeHere"와 참조 페이지를 여기서 작성해야 합니다.
그런 다음 이면 코드를 구현합니다.
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; }
}
}
또한 앱 클래스에서 탐색하려면 MainPage에 NavigationPage 인스턴스가 필요합니다(이 예에서는).
public App ()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
}
xamarin 폼용이지만 WPF 프로젝트용도 비슷합니다.
명령어는 WPF 및 Xamarin 용으로 변경할 수 있습니다.https://stackoverflow.com/a/47887715/8210755
언급URL : https://stackoverflow.com/questions/2006507/add-parameter-to-button-click-event
'programing' 카테고리의 다른 글
C#에서 문자열을 바이트 배열로 변환하는 중 (0) | 2023.04.14 |
---|---|
@size와 @dynamic의 차이점은 무엇입니까? (0) | 2023.04.14 |
iPhone의 내비게이션 바에서 '뒤로' 버튼을 숨기는 방법 (0) | 2023.04.14 |
Excel에서 시간 필드를 문자열로 변환 (0) | 2023.04.14 |
SQL Join: 1대 다 관계에서 마지막 레코드 선택 (0) | 2023.04.14 |