使用Fody Commander时如何访问传递给函数的命令参数

时间:2015-06-18 00:49:14

标签: wpf xaml fody

我正在尝试使用Fody Commander实现登录命令。

我的登录按钮XAML是这样的:

<Button x:Name="button"
                IsDefault="True"
                Command="{Binding SignInCommand}"
                Style="{DynamicResource AccentedSquareButtonStyle}"
                Grid.Column="1"  Grid.Row="0" Grid.RowSpan="2" Margin="10">
            <Button.CommandParameter>
                <MultiBinding Converter="{StaticResource SignInConverter}">
                    <Binding Path="Text" ElementName="UserName" />
                    <Binding ElementName="Password" />
                </MultiBinding>
            </Button.CommandParameter>
            <TextBlock FontSize="{DynamicResource NormalFontSize}">Sign In</TextBlock>
        </Button>

在我的ViewModel中,我有这个:

[OnCommand("SignInCommand")]
    public void OnSignIn()
    {
        //Need to access the parameters passed from the XAML.
    }

我无法访问从XAML传递给OnSignIn()的参数。

2 个答案:

答案 0 :(得分:0)

如何在ViewModel中为OnSignIn方法添加参数并将其发送到实现ICommand的类?在你的情况下SignInCommand。

public class SignInCommand<T> : ICommand
{
    public Action<T> _TargetExecuteMethod;
    public Func<T, bool> _TargetCanExecuteMethod;

    public SignInCommand(Action<T> executeMethod)
    {
        _TargetExecuteMethod = executeMethod;
    }

    public bool CanExecute(object parameter)
    {
        if (_TargetExecuteMethod != null)
            return true;
        return false;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        T tParam = (T)parameter;
        if (_TargetExecuteMethod != null)
            _TargetExecuteMethod(tParam);
    }
}

在ViewModel的构造函数中,您可以像这样初始化它:

signInCommand = new SignInCommand<object>(OnSignIn);

现在,您的OnSignInMethod将收到您想要的参数。此外,您也可以支持CanExecuted Func。它已经存在于SignInCommand中,只需在构造函数中设置一个新参数,在ViewModel中定义它并在实例化时发送它。

我在这里提出了一个非常简单的解决方案,对不起,我不确定Fody是什么,不幸的是我现在没有时间检查它。祝你好运!

答案 1 :(得分:0)

最后,将参数传递给基于FODY Commander的命令非常容易。我在它上面写了一个小博客。链接 - http://ikeptwalking.com/fody-commander-and-wpf-commands/