C#+XAML:MVVM Light Toolkitの.net Framework4.5(C#5)以上用カスタムスニペット(プロパティ用)
MVVMLight Toolkit純正のスニペット(mvvminpcやmvvminpclambdaなど)では、文字列かラムダ式でプロパティ名を渡しています。 しかし、.net4.5(C#5)ではnameof演算子を使い、メソッド側で呼び元のプロパティ名を取得できるため、実際のところ呼び出し時にプロパティ名は渡す必要がありません。
そのため.net4.5以降のMVVMLight Toolkitでは、RaisePropertyChangedメソッドにnameof演算子を使って実装されたプロパティ名関連の引数を無くしたオーバーロードが実装されています。
今回はmvvminpcをカスタムし、.net4.5以降のMVVMLight Toolkit向けの簡略化されたスニペットの作り方を紹介いたします。(なお、ファイルパスなどの情報はVisual Studio 2015を対象としたものです。)
1;以下の内容でファイルを用意します。名前は「mvvmInpc45.snippet」としておいてください。
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> <Title>INPC Property</Title> <Shortcut>mvvminpc45</Shortcut> </Header> <Snippet> <Declarations> <Literal Editable="true"> <ID>Type</ID> <ToolTip>Property type</ToolTip> <Default>bool</Default> <Function> </Function> </Literal> <Literal Editable="true"> <ID>AttributeName</ID> <ToolTip>Attribute name</ToolTip> <Default>_myProperty</Default> <Function> </Function> </Literal> <Literal Editable="true"> <ID>InitialValue</ID> <ToolTip>Initial value</ToolTip> <Default>false</Default> <Function> </Function> </Literal> <Literal Editable="true"> <ID>PropertyName</ID> <ToolTip>Property name</ToolTip> <Default>MyProperty</Default> <Function> </Function> </Literal> </Declarations> <Code Language="csharp"><![CDATA[private $Type$ $AttributeName$ = $InitialValue$; /// <summary> /// Sets and gets the $PropertyName$ property. /// Changes to that property's value raise the PropertyChanged event. /// </summary> public $Type$ $PropertyName$ { get { return $AttributeName$; } set { if ($AttributeName$ == value) { return; } $AttributeName$ = value; RaisePropertyChanged(); } }]]></Code> </Snippet> </CodeSnippet> </CodeSnippets>
2:1で用意したファイルを「%UserProfile%\Documents\Visual Studio 2015\Code Snippets\Visual C#\My Code Snippets」に保存します。 または、Visual Studinのメニュー「ツール > コード スニペット マネージャー」より、インポート機能でスニペットを追加します。
3:Visual StudioのC#ファイル内で「mvvminpc45」と入力し、タブキーを押してみてください。(インテリセンスに表示されない場合は、Visual Studioを再起動してください)
上記の操作で、下記のような感じのスニペットが展開されたかと思います。
private bool _myProperty = false; /// <summary> /// Sets and gets the MyProperty property. /// Changes to that property's value raise the PropertyChanged event. /// </summary> public bool MyProperty { get { return _myProperty; } set { if (_myProperty == value) { return; } _myProperty = value; RaisePropertyChanged(); } }
mvvminpcよりもすっきりした内容で、.net4.5以降では同機能が利用できます。