En Passant Des Paramètres De Commande
Je suis en train de passer d'un paramètre de commande avec ma commande. J'ai des commandes en général de travail, mais le passage d'un paramètre ne semble pas aller bien pour moi.
Je suis en train de passer le nom d'utilisateur de la Propriété à partir de Données Hiérarchiques dans mon XAML. Ce que je fais mal ici.
Je recevoir et de l'erreur en essayant de compiler avec les commandes de déclaration:
impossible de convertir de 'lambda' expression de "Système".L'Action"
<HierarchicalDataTemplate
DataType="{x:Type viewModel:UsersViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding UserName}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit" Command="{Binding EditCommand}" CommandParameter="{Binding UserName}"/>
<MenuItem Header="Delete"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
private RelayCommand _editCommand;
public ICommand EditCommand
{
get
{
if (_editCommand== null)
{
_editCommand= new RelayCommand(param => this.LoadUser(object parameter));
}
return _editCommand;
}
}
public void LoadUser(object username)
{
}
Classe RelayCommand
public class RelayCommand : ICommand
{
#region Fields
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
#endregion //Fields
#region Constructors
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
#endregion //Constructors
#region ICommand Members
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
#endregion
}
Merci pour l'aide!
Vous devez vous connecter pour publier un commentaire.
Ne devrait pas être:
Actions
sont juste des méthodes void, le côté droit est le corps de la méthode dans laquelle vous venez d'exécuter tout ce que vous voulez faire.Funcs
serait méthodes avec la valeur de retour.Vous ne devriez pas appeler la méthode, vous devriez passer en tant que paramètre. Il suffit de remplacer
new RelayCommand(param => this.LoadUser(object parameter));
pournew RelayCommand(this.LoadUser);
Question similaire ici:
RelayCommand lambda problème de syntaxe