我想将自己的Xamarin.Forms.Button中的Command作为CommandParameter传递给我的ViewModel。我知道如何从例如...

XAML (为简洁起见,错过了大多数属性)

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

XAML.cs
public partial class MyTestPage
{
    public MyTestPage()
    {
        InitializeComponent();

        myButton.CommandParameter = myButton;
    }
}

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

...但是可以在XAML本身中声明CommandParameter吗?或者换句话说,将参数设置为按钮本身的绑定(bind)语法是什么?
<Button x:Name="myButton"
        Text="My Button"
        Command="{Binding ButtonClickCommand}"
        CommandParameter="{[WHAT WOULD GO HERE]}"/>

顺便说一句,我已经尝试过CommandParameter="{Binding RelativeSource={RelativeSource Self}}",但是没有用。

谢谢,

最佳答案

Xamarin.Forms具有“引用”标记扩展,可以完成以下工作:

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

虽然,这是我第一次看到这种需要,并且您可能可以更好地将Views与ViewModels分开,并通过使用更简洁的模式或不共享按钮命令来解决此问题。

关于c# - 如何在Xamarin.Forms页面中从XAML将Button作为CommandParameter传递?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25912091/

10-09 02:20