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