0

我正在尝试使用 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() 的参数。

4

2 回答 2

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 是什么,不幸的是我现在没有时间检查它。祝你好运!

于 2015-06-18T04:26:14.157 回答
0

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

于 2015-08-08T01:53:09.727 回答