Как получить доступ к параметру команды, переданному в функцию при использовании 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().

2 ответа

В конце концов, было невероятно легко передать параметр командам на основе FODY Commander. Я написал небольшой блог на нем. Ссылка - http://ikeptwalking.com/fody-commander-and-wpf-commands/

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

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

Другие вопросы по тегам