Could you please provide a sample, of how do you implement the ICommandSource interface. As I want my UserControl, which doesn't have the ability to Specify command in xaml, to have this ability. And to be able to handle the command when user clicks on the customControl.
views:
46answers:
3
+3
Q:
In WPF how do I implement ICommandSource to give my custom control ability to use Command from xaml?
A:
Your UserControl will have a code behind file cs or vb, you have to implement the interface ICommandSource, and once you implement that, in some event you will have to actually invoke the command and also check CanExecute.
Akash Kava
2010-08-17 12:19:50
A:
If you want a good explanation on how to implement the ICommandSource you can look into this example of the msdn:
http://msdn.microsoft.com/en-us/library/system.windows.input.icommandsource.aspx
Wouter Janssens - Xelos bvba
2010-08-17 12:22:06
+3
A:
Here's an example :
public partial class MyUserControl : UserControl, ICommandSource
{
public MyUserControl()
{
InitializeComponent();
}
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(MyUserControl), new UIPropertyMetadata(null));
public object CommandParameter
{
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
// Using a DependencyProperty as the backing store for CommandParameter. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.Register("CommandParameter", typeof(object), typeof(MyUserControl), new UIPropertyMetadata(null));
public IInputElement CommandTarget
{
get { return (IInputElement)GetValue(CommandTargetProperty); }
set { SetValue(CommandTargetProperty, value); }
}
// Using a DependencyProperty as the backing store for CommandTarget. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandTargetProperty =
DependencyProperty.Register("CommandTarget", typeof(IInputElement), typeof(MyUserControl), new UIPropertyMetadata(null));
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
var command = Command;
var parameter = CommandParameter;
var target = CommandTarget;
var routedCmd = command as RoutedCommand;
if (routedCmd != null && routedCmd.CanExecute(parameter, target))
{
routedCmd.Execute(parameter, target);
}
else if (command != null && command.CanExecute(parameter))
{
command.Execute(parameter);
}
}
}
Note that the CommandTarget
property is only used for RoutedCommands
Thomas Levesque
2010-08-17 12:42:35
+1, nice example
mizipzor
2010-08-17 12:44:51
Great example! Thanks!
Vitalij
2010-08-17 13:08:59