このような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>
次に、属性を介してアクセスします。
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var theValue = button.Attributes["myParam"].ToString()
}
これを行うには2つの方法があります。
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;
}
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 Code 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 "