Как получить доступ к параметру команды, переданному функции при использовании Fody Commander

Я пытаюсь использовать 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().


person NotAgain says Reinstate Monica    schedule 18.06.2015    source источник


Ответы (2)


Как насчет того, чтобы добавить параметр для метода OnSignIn в ViewModel и отправить его классу, реализующему 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 и отправьте при создании экземпляра.

Я дал здесь довольно простое решение, извините, я не уверен, что такое Фоди, и, к сожалению, у меня нет времени проверить его сейчас. Удачи!

person Olaru Mircea    schedule 18.06.2015

В конце концов, передать параметр в команды FODY Commander оказалось смехотворно легко. Я написал об этом небольшой блог. -commander-and-wpf-commands/

person NotAgain says Reinstate Monica    schedule 08.08.2015