18

ViewModel にをXamarin.Forms.Buttonそのまま渡したいと思います。コードビハインドなどからこれを達成する方法を知っています...CommandCommandParameter

XAML (簡潔にするためにほとんどのプロパティが省略されています)

<Button x:Name="myButton"
    Text="My Button"
    Command="{Binding ButtonClickCommand}"/>

XAML.cs

public partial class MyTestPage
{
    public MyTestPage()
    {
        InitializeComponent();

        myButton.CommandParameter = myButton;
    }
}

ビューモデル

public class MyViewModel : ViewModelBase
{
    public MyViewModel()
    {
        ButtonClickCommand = new Command(
            (parameter) =>
            {
                var view = parameter as Xamarin.Forms.Button;
                if (view != null)
                {
                    // Do Stuff
                }
            });
    }

    public ICommand ButtonClickCommand { get; private set; }
}

CommandParameter...しかし、XAML自体で宣言することは可能ですか? 言い換えれば、パラメーターをボタン自体に設定するバインディング構文は何ですか?

<Button x:Name="myButton"
        Text="My Button"
        Command="{Binding ButtonClickCommand}"
        CommandParameter="{[WHAT WOULD GO HERE]}"/>

ところで、私はすでに試しましたがCommandParameter="{Binding RelativeSource={RelativeSource Self}}"、うまくいきませんでした。

ありがとう、

4

4 に答える 4

25

Xamarin.Formsまさにそれを行う Reference マークアップ拡張機能があります。

<Button x:Name="myButton"
    Text="My Button"
    Command="{Binding ButtonClickCommand}"
    CommandParameter="{x:Reference myButton}"/>

ただし、これは私がこの必要性を見たのは初めてであり、ViewModel から View をより適切に分離し、よりクリーンなパターンを使用するか、ボタン間でコマンドを共有しないことでこれを解決できる可能性があります。

于 2014-09-18T14:05:27.603 に答える