ICommand woes...

  • Thread starter Thread starter Lloyd Dupont
  • Start date Start date
L

Lloyd Dupont

I tried to create a SetColor command and a ColorPicker which uses it.

There is one effect I cannot reproduce, it is tracking the CommandSource and
wether it's valid.

By that I mean if I create a MenuItem like that:

<MenuItem Header="Blue" Command="{x:Static local:MyCommands.SetColor}"
CommandParameter="{x:Static Colors.Blue}" />

It enables/disables depending on wether the currently focused element
respond to the SetColor command.


But my ColorPicker never get any CanExecute or whatever event call,
therefore I cannot update it appropriately (i.e. enable/disable) when the
focused element change.

I implemented ICommandSource, used a RoutedEvent, I never get any relevant
info....

Any idea what I could have missed?!?
 
found it!

it's quite tricky, I remember read about it in a blog 6 month ago but it's
nowhere in the documentation!!!

RoutedCommand.CanExecuteChanged strore the event handlers as WeakReference.
Therefore you have to hold a reference to the handlers your self if you want
your event handler to be called....
 
Well done!

I am playing in the same area and am sure to have come across this soon.

Thanks.
 
Thanks!! :-D

Additional tip:

I was trying to get a value from the command source:
I.e. I have a color picker, I want it to be initialized to the current color
of the SetColorCommand target.
There is no way to do that!

But... little trick....
ICommand.CanExecute(object obj) take any object as argument.

I used something like:
public class CommandCanExecuteArg
{
object val;
public CommandCanExecuteArg(object val)
{
this.val = val;
}
public object Parameter { get { return val; } }
public object ReturnValue { get; set; }
}


and I pass an instance of it to CanExecute(), this way the
SetColorCommandTarget can return its current color in ReturnValue

--
Regards,
Lloyd Dupont
NovaMind Software
Mind Mapping at its best
www.nova-mind.com
 
Back
Top