by andrea.nospam@nospam.boschin.it (Andrea Boschin) via Silverlight Playground on 7/9/2009 10:16:53 PM
Crawling the Internet there are many samples about how to write commands for the Composite Application Guidance, aka Prism v2.0. One of my favorites is the Erik Mork's podcast.
I figure out the first time you see how many code you need, to write a working command you are really astonished. This also happened to me. But if you analyze the code you will see that the skeleton of a command is always the same, and you need to change only some names and types to have it working on different events.
This is the perfect situation where a code snippet works effectively so I decided to write my own and publish on this site. I've isolated some zones you have to replace and I've created some markers that will take advantage of the Visual Studio expansion snippets.
Here is the snippet:
1: <?xml version="1.0" encoding="utf-8" ?>
2: <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
3: <CodeSnippet Format="1.0.0">
4: <Header>
5: <Title>prismcommand</Title>
6: <Shortcut>prismcommand</Shortcut>
7: <Description>Code snippet for an automatically implemented commands</Description>
8: <Author>Elite Agency</Author>
9: <SnippetTypes>
10: <SnippetType>Expansion</SnippetType>
11: </SnippetTypes>
12: </Header>
13: <Snippet>
14: <Declarations>
15: <Literal>
16: <ID>command</ID>
17: <ToolTip>Command Name</ToolTip>
18: <Default>CommandName</Default>
19: </Literal>
20: <Literal>
21: <ID>control</ID>
22: <ToolTip>Control type</ToolTip>
23: <Default>Control</Default>
24: </Literal>
25: <Literal>
26: <ID>event</ID>
27: <ToolTip>Control Event</ToolTip>
28: <Default>Event</Default>
29: </Literal>
30: </Declarations>
31: <Code Language="csharp">
32: <![CDATA[public class $command$CommandBehavior : CommandBehaviorBase<$control$>
33: {
34: public $command$CommandBehavior($control$ targetObject)
35: : base(targetObject)
36: {
37: targetObject.$event$ += (s, e) => base.ExecuteCommand();
38: }
39: }
40:
41: public static class $command$
42: {
43: public static readonly DependencyProperty $command$BehaviorProperty =
44: DependencyProperty.RegisterAttached(
45: "$command$BehaviorProperty", typeof($command$CommandBehavior),
46: typeof($command$CommandBehavior), null);
47:
48: #region CommandProperty
49:
50: public static readonly DependencyProperty CommandProperty =
51: DependencyProperty.RegisterAttached(
52: "Command", typeof(ICommand), typeof($command$),
53: new PropertyMetadata(CommandProperty_Changed));
54:
55: public static ICommand GetCommand(DependencyObject obj)
56: {
57: return (ICommand)obj.GetValue(CommandProperty);
58: }
59:
60: public static void SetCommand(DependencyObject obj, ICommand value)
61: {
62: obj.SetValue(CommandProperty, value);
63: }
64:
65: private static void CommandProperty_Changed(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
66: {
67: $control$ targetObject = dependencyObject as $control$;
68:
69: if (targetObject != null)
70: GetOrCreateBehavior(targetObject).Command = e.NewValue as ICommand;
71: }
72:
73: #endregion
74:
75: #region CommandParameterProperty
76:
77: public static readonly DependencyProperty CommandParameterProperty =
78: DependencyProperty.RegisterAttached(
79: "CommandParameter", typeof(object),
80: typeof($command$), new PropertyMetadata(CommandParameterProperty_Changed));
81:
82: public static ICommand GetCommandParameter(DependencyObject obj)
83: {
84: return (ICommand)obj.GetValue(CommandParameterProperty);
85: }
86:
87: public static void SetCommandParameter(DependencyObject obj, ICommand value)
88: {
89: obj.SetValue(CommandParameterProperty, value);
90: }
91:
92: private static void CommandParameterProperty_Changed(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
93: {
94: $control$ targetObject = dependencyObject as $control$;
95:
96: if (targetObject != null)
97: GetOrCreateBehavior(targetObject).CommandParameter = e.NewValue;
98: }
99:
100: #endregion
101:
102: private static $command$CommandBehavior GetOrCreateBehavior($control$ targetObject)
103: {
104: $command$CommandBehavior behavior = targetObject.GetValue($command$BehaviorProperty) as $command$CommandBehavior;
105:
106: if (behavior == null)
107: {
108: behavior = new $command$CommandBehavior(targetObject);
109: targetObject.SetValue($command$BehaviorProperty, behavior);
110: }
111:
112: return behavior;
113: }
114: }]]>
115: </Code>
116: </Snippet>
117: </CodeSnippet>
118: </CodeSnippets>
To have this snipped installed you simply need to create a file named prismcommand.snipped and copy the code inside it (or simply download the attached file). This file has to be loaded in the My Code Snippets directory using the Code Snippet Manager in Visual Studio 2008.
Finally after creating a file in your project type "prismcommand" in the text editor and hit TAB. Two classes will be exploded and you will be asked to provide the expansion tags I listed above. Obviously you have to include the assemblies from Prism and reference the Microsoft.Practices.Composite.Presentation.Commands namespace to have it compile.
Download: prismcommand.zip (1,11 KB)
Original Post: A code snippet to quickly write Prism commands
The content of the postings is owned by the respective author. Silverlight Feeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on Silverlight Feeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.