Bonjour à tous,

J'ai un petit problème de commandes en WPF ...
En gros j'ai une interface simple, avec une ListBox bindée sur une collection, ainsi qu'un bouton qui permet de supprimer l'élement selectionné dans la ListBox.

Pour cela voici mon XAML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<Button Grid.Column="1" Content="Supprimer" Grid.Row="0" Margin="10"  CommandParameter="{Binding ElementName=Lb, Path=SelectedItem}" Command="{Binding Path=DeleteCmd}"/>
<ListBox Margin="10" ItemsSource="{Binding Path=Users}" Grid.Row="1" Grid.ColumnSpan="2" x:Name="Lb"/>
Voici le code ma classe DeleteCmd implémentant ICommand :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
internal class DeleteCmd : ICommand
    {
        ICollection<User> _users;
        bool _canExec;
 
        public DeleteCmd( ICollection<User> users )
        {
            _users = users;
        }
 
        public bool CanExecute( object parameter )
        {
            bool canExec;
            if( parameter != null )
            {
                if( parameter is User )
                {
                    canExec = true;
                }
            }
            canExec = false;
 
            if( canExec != _canExec )
            {
                _canExec = canExec;
                if( CanExecuteChanged != null ) CanExecuteChanged( this, EventArgs.Empty );
            }
            return _canExec;
        }
 
        public event EventHandler  CanExecuteChanged;
 
        public void Execute( object parameter )
        {
            _users.Remove( (User)parameter );
        }
    }
Donc voila, normalement cela devrai fonctionner, mais le problème est simple : lors du chargement de la page la méthode CanExecute de ma propriété DeleteCmd (de type ICommand) est appellée, or le paramètre est null (car aucun élement n'est selectionné dans la ListBox), et donc la méthode CanExecute retourne null. Et donc le bouton "Supprimer" est désactivé.

Comment puis-je faire en sorte de réactiver le bouton ? Et plus généralement, comment faire en sorte que le mécanisme des commandes soit au courant des changements dans la fenetre pour qu'il puisse réevaluer la méthode CanExecute (pour réactiver des composants précédemment désactivés) ?

Merci de votre aide
Antoine.