2012年2月23日
#
ViewModelDiagram ソースも含めてCodePlex公開しました。
http://viewmodeldiagram.codeplex.com/
とりあえず日本語のみです。
インストール手順とか使い方とかドキュメントにしていかないと。
英語に翻訳してくれる有志も募集してます。
mnow[アット]yahoo[ドット]co[ドット]jp までメールください。
2012年1月6日
#
WPF はなんかおかしい、ビヘイビアーといいデータテンプレートセレクターといい、View と ViewModel を両方知らないと達成できないものがそこここにちりばめられている。
特にデータテンプレートセレクターはコントローラ的な性格をもつものだと思っっていた。
SilverlightではテンプレートセレクターがないのでAppのPartialとしてViewModel を初期化してView を切り替えるものを作成し、ビジネスにからデータを取得する機能も便利なので付け加えた。
一方で更新系はViewModel からビジネスを呼ぶほうが断然便利なのでそのルートは確保したままにしている。
これは層を追加することによってアプリケーションファザード的な薄皮をプレゼンターに作る無駄なコーディングが増えることを嫌ったせいだ。
WPFでもその考えを踏襲して作成している。
去年のMSDNマガジンに「WPF 向けのモデル - ビュー - プレゼンター - ビューモデル設計パターン」という記事があった。
http://msdn.microsoft.com/ja-jp/magazine/hh580734.aspx
これは、私のやり方と合致するものだと思った。
図にするとこんな感じだが、MSDNマガジンとは、2点異なっている。
1)更新系はViewModel からビジネスを呼ぶ。
2)View から ViewModel (ICommand) を経由してPresenterを呼ぶ。

2012年1月4日
#
ViewModelDiagram を久しぶりにバージョンアップしました。
ここからダウンロードしてください。
http://www.mnow.jp/tabid/220/Default.aspx
変更履歴
1.0.0.0 => 1.0.1.0
ViewModel にプロパティがないときにエラーになるのを修正、各メソッド間の空行を修正。
1.0.1.0 => 1.1.0.0
Prism フレームワークに対応し、フレームワークなしを選ぶとちょっとのコーディングで各フレームワークに対応可能。
少しずつ日本語化。
インストーラ版を作成しました。
1.1.0.0 => 1.1.1.0
INotifyPropertyChanging, IDataErrorInfo のメソッドをBaseクラスに移動
設定不要なプロパティを見せないようにした。
ViewModel,Property,Command,EventのプロパティグリッドにXMLコメント用のプロパティを追加
インストーラ版だけの提供にしました。
1.1.1.0 => 1.1.2.0
Aggregate,Property,Command,Eventのプロパティグリッドに初期化と終了化用のプロパティを作成。
PropertyのプロパティグリッドにMultiplicityプロパティを追加してObservableCollectionに対応した。
Locatorを作成した。
Inheritを作成した。
ViewModel のプロパティによる初期化コンストラクタを作成するのをやめた。
Command プロパティに Set を作成した。
1.1.2.0 => 1.1.3.0
設定不要なプロパティを見せないようにした。
ViewModel から ViewModel に2本以上 Aggregate の線を出した場合Nameが違ってもコンパイルエラーになるのに対応した。
2012年1月2日
#
あけましておめでとうございます。
今年もよろしくお願いします。
マイクロソフトから Visual Developer Tools - C#の カテゴリで、MVPの再表彰していただくことになりました。
よりいっそう自己の研鑽とコミュニティ発展の協力に努めるよう頑張ります。
今年は仕事面でも貪欲に取り組んでいきたいと思います。
MVPの表彰も8回目になりました。
応援・協力していただいた皆様ありがとう御座いました。
これからもよろしくお願いいたします。
2012/01/01 (日) 23:49に「2012 Microsoft MVP 受賞のお知らせ」が来たのでこの時間になってしまいました。
「.Net ユーザーエクスペリエンス研究所」よろしくお願いします。
http://mnow.jp/
「えムナウのプログラミングのページ」よろしくお願いします。
http://mnow.wankuma.com/
INETA JAPAN の理事もやらせていただいてます。
http://www.ineta.jp/
http://www.ineta.jp/tabid/73/Default.aspx
ことしはますます色々とやっていきたいと思います。
よろしくお願いいたします。
2011年12月12日
#
東京今年最後の勉強会です。
今回も豪華なメンバーで新しい技術ネタをお届けします。
マイクロソフト関連技術を使って実際にお仕事されている人の経験から出る話が聞けると思います。
Metro Style、Windows Phone、Visual Studio 11、.NET Framework 4.5 これからの世界を是非聞いてください。
私が聞きたいのを集めました。
マイクロソフトの人も話せない情報もあるかも。
http://www.wankuma.com/seminar/20111217tokyo66/
2011/12/17 10:20-18:00
会場情報:東京都 渋谷区 千駄ケ谷5-27-9 新宿パークホテル2F
- 10:20 ~ 10:40 開場・受付開始
- 10:40 ~ 10:50 わんくまについて
- 10:50 ~ 11:40 「とりあえず作ってみよう Metro Style アプリケーション」by インフラジスティックス 池原さん Lv.1くまー
- 11:40 ~ 13:10 おひるごはん
- 13:10 ~ 13:40 ライトニングトーク
- 13:40 ~ 14:40 「WPF/Silverlight視点で視る MetroスタイルのXAML」by グレープシティ八巻さん Lv.2くまー
- 14:50 ~ 15:40 「Windows Phoneアプリ開発 Marketplaceが教えてくれたこと」by セカンドファクトリー杉下さん Lv.1くまー
- 15:50 ~ 17:00 「Windows Phone アプリケーション、デモで見る開発のポイント」by マイクロソフト大西さん Lv.1.5くまー
- 17:10 ~ 18:00 「Visual Studio 11 Developer Preview をさわってみよう」by えムナウ Lv.1くまー
- 18:20 ~ 懇親会
2011年9月7日
#
横浜勉強会が東京勉強会に変わったので前回から2週間しかたっていませんが、今回も豪華なメンバーでいろいろな内容をお届けします。
これからの勉強にピッタリなお持ち帰りネタ満載ですので是非来てください。
Lync / Windows Azure Toolkit for Windows Phone 7 / msi こいネタ満載です。
PowerShell / WPF・Silverlightメモリーリーク 明日から使えそうな実戦ネタです。
http://www.wankuma.com/seminar/20110910tokyo63/
2011/09/10 10:20-17:50
会場情報:東京都 渋谷区 千駄ケ谷5-27-9 新宿パークホテル2F
Telephone 03-3352-0898
アクセス情報 :
JR新宿駅 新南口 徒歩5分
JR代々木駅 北口 徒歩5分
参加料(寄付):目安1,000円 (今後のサーバ増強費、回線費、講師交通費、会場費などに充当させていただきます。よろしくおねがいいたします。)
- 10:20 ~ 10:40 開場・受付開始
- 10:40 ~ 10:50 わんくまについて
- 10:50 ~ 11:40 「今日から使う PowerShell あの設定はこうやって変える」by 惑星(原田)さん Lv.1くまー
- 11:40 ~ 13:10 おひるごはん
- 13:10 ~ 13:40 ライトニングトーク
- 13:40 ~ 14:40 「Lyncを使って、ここまでできる!(リアルタイム コミュニケーション開発)」by マイクロソフト松崎さん Lv.2くまー
- 14:50 ~ 15:40 「Windows Azure Toolkit for Windows Phoneのご紹介」by マイクロソフト鈴木章太郎さん Lv.3くまー
- 15:40 ~ 16:10 休憩時間
- 16:10 ~ 17:00 「msi を見てみよう!」by とっちゃん Lv.5くまー
- 17:00 ~ 17:50 「実戦的WPF・Silverlightメモリーリーク解消方法」by えムナウ Lv.3くまー
- 18:20 ~ 懇親会
2011年8月25日
#
わんくま同盟 東京勉強会 #62
http://www.wankuma.com/seminar/20110827tokyo62/
2011/08/27 10:20-17:50
- 10:20 ~ 10:40 開場・受付開始
- 10:40 ~ 10:50 わんくまについて
- 10:50 ~ 11:40 「Silverlight は Native の夢を見るか?」by えムナウ Lv.3くまー
- 11:40 ~ 13:10 おひるごはん
- 13:10 ~ 13:40 ライトニングトーク
- 13:40 ~ 14:30 「仕様七変化」by がるさん Lv.2くまー
- 14:40 ~ 15:30 「例外とコンストラクタ」by 仲根かなはるちゃんさん Lv.2くまー
- 15:30 ~ 16:00 休憩時間
- 16:00 ~ 16:50 「『ストラウストラップのプログラミング入門』で語られなかったいくつかのこと」by アキラさん Lv.1くまー
- 17:00 ~ 17:50 「びあね先生の論文『Learning Standard C++ as a New Language』を読んでみよう。」by επιστημη Lv.1くまー
- 18:20 ~ 懇親会
Tech party 2011 に参加しています。
http://techparty2011.iinaa.net/
Tech party 2011 のじゃんけんグッヅもいただいてます。
ぜひ参加してください。
2011年8月11日
#
Client App Dev の MVP の 薬師寺 聖さん がRIAのキャラを作成してくれています。
Expression Design ファイル
http://sei.seindesign.net/image/RIA_chara.zip
(左がHTMLイメージ、右がSilverlightイメージです)
利用する場合は以下の条件を参照ください。
RIAに関わる開発者個人や任意団体の宣伝および、サンプルや記?事の素材に、利用できます(私に了解をとる必要はありません)。
ただし、HTMLのロゴの再配布や、機種が特定されるPhoneの着色は、ライセンスの問題になるとイヤだから、ダウンロードファイルからは省いています。Silverlightの方のベルトのバックルをVSのロゴそのものの形にするといった加工はダメで?す。
加工可能な範囲とExpression Designの操作手順は、また、ブログにでも書きます。
Blogはこちらです。
http://blogs.itmedia.co.jp/seindesign/
2011年8月3日
#
Tech Party 2011 in Tokyo -RIA アーキテクチャ研究会- をキックオフとしてRIAアーキテクチャ研究会 を立ち上げます。
私がリーダとなりましたが、 今回のスピーカメンバーも発起人の皆さんです。
目的
下記の通りです。
・今後開発において主流となるであろう MVVM パターンの利用によるアプリケーション開発を始めるきっかけとする
・Cloud 時代の RIA について広くアーキテクチャを検討できる場とする
・対象は、Windows Phone、HTML5、Silverlight、WPF、等
・月1回開催のセミナーとディスカッションを通じ、RIA や MVVMパターン に対する理解を深める
・MSDN Architecture Center にサイトを構築し、毎回の活動報告とサマリーを提供する
・リソースやマテリアルを最終的に整備することで、開発者のRIAやMVVM パターン等アーキテクチャへの認知度・習熟度を上げる
・マイクロソフトのリソースである Patterns & PracticesやApplication Architecture Guideline とも連携を模索する
・Codeplex にあるアセット(Prism、Caliburn等)の研究も行う
対象者
・業務システムのアーキテクト/デベロッパー
・業務システムのデザイナー
・コンシューマー向けシステムのアーキテクト/デベロッパー
・コンシューマー向けシステムのデザイナー
・Web デベロッパー
・Web デザイナー
とほぼすべてにわたります。当然のことながら、Windows Phone、HTML5を含みます。
初期メンバー及び発起人
発起人メンバー = MVP の方を中心に数名で構成させて戴いています。アドバイザーとして、MSRDの方にもお願いしています。
将来的な構成予定としては、SIer、エンドユーザー、ISV/CSV、 等様々な方に参加して戴ければと思っています。
Microsoft 鈴木章太郎さんに支援していただいています。
活動内容
?セミナー、ディスカッションの定期的開催
(案)月一、土曜日午後~夕方
FaceBookに公開グループを作成しました。
http://www.facebook.com/#!/groups/182996675100851/
https://www.facebook.com/?sk=inbox&action=read&tid=id.141092922643227#!/groups/182996675100851/?notif_t=group_added_to_group
キックオフセミナー
Tech Party 2011 in Tokyo -RIA アーキテクチャ研究会-
懇親会は、各コミュニティのセッション終了後に開催されます。参加費用は2,000円程度です。ぜひご参加ください!
2011年6月27日
#
MVVMパターンの構築手法その3のセッションで、ビジネスエンティティがドメインモデル形態の実装で、ビジネスワークフローやビジネスコンポーネントがトランザクションスクリプト形態の実装という説明に違和感を覚えた方もいらっしゃるようです。
特に JAVA を長年やっていた方はそう感じたようです。
ADO.NET の DataSet や LinqToSQL や Entity Framework はドメインモデルを構築しやすい構造になっています。
WCF RIA Services で提供されるのは、ドメイン サービスでクライアントにドメインモデルを構築しやすい構造になっています。
つまりビジネスエンティティにデータベースサーバーのデータベースの必要なサブセットを構築しやすいようになっています。
なおかつエンティティはパーシャルで拡張できビジネスルールを作成できます。
リッチクライアントでは起動時やログイン時に必要なデータをサーバーより取得してきて、UIによる変更情報をビジネスエンティティに蓄え、ユーザーの保存ボタンなどのアクションによってサーバーに保存します。
ビジネスエンティティはデータベースのサブセットとしてドメインモデル形態の実装を行うのが自然です。
トランザクションスクリプトはMartin Fowlerの造語ですが、 プロシージャスタイルのことで、プロシージャは最初に必要なデータを取得して更新情報を作成してSQLなどの更新手段を作成して実行します、この間にビジネスルールは一般に入りません、データベースサーバーがビジネスルールを持ち結果をプロシージャに返します。
ビジネスワークフローやビジネスコンポーネントはユースケースの実現を行うことに主眼を置きます。
ビジネスワークフローは1ユースケースの成功の脚本や代わりの脚本や失敗の脚本をトランザクション的に行い事後条件を満足することを目的とします。
ビジネスワークフローはビジネスコンポーネントに依頼して必要な情報をビジネスエンティティから取得します、更新情報を作成して更新手段となるビジネスコンポーネントを利用してをビジネスエンティティを更新します。ビジネスエンティティはビジネスルールを持ち更新結果を返します。
つまり、ビジネスワークフローとビジネスコンポーネントはデータベースではなくビジネスエンティティに対してトランザクションスクリプトのプロシージャスタイルを行っています。
ビジネスエンティティがドメインモデル形態の実装で、ビジネスワークフローやビジネスコンポーネントがトランザクションスクリプト形態の実装という意味を理解していただけることを期待します。
補足情報としてアプリケーションアーキテクチャ2.0におけるビジネス層の形態とユースケースの例を添付します。

|
ユースケース名 |
受注 |
|
アクター(かかわる人やサービス) |
販売担当者、仕入販売システム |
|
トリガー(起点) |
顧客よりの受注 |
|
ガード(事前条件) |
なし |
|
目標(事後条件) |
在庫不足があれば仕入指示して在庫不足を解消し出荷指示をする |
|
脚本 |
1.在庫照会をする
2.在庫があれば出荷指示する |
|
代わりの脚本 |
2a.在庫が不足があれば仕入指示する
3.出荷指示する |
|
失敗の脚本 |
|
2011年6月17日
#
わんくま同盟 東京勉強会 #60 で川西さんがKinect for Windows SDK Betaでしゃべってくれることになりました。
パネルディスカッションの時間をあててお願いすることにしました。
Microsoft 川西 裕幸さん
Kinect for Windows SDK Beta の概要とNUIプログラミング レベル2くまー
Kinect for Windows SDK Beta がリリースされました。本講演ではKinect およびKinect for Windows SDK Beta の概要と、これを使った NUI (Natural User Interface) プログラミングについて、デモとともに紹介します。
スケジュールはこうなります。
- 10:20 ~ 開場・受付開始
- 10:40 ~ 10:50 わんくまについて
- 10:50 ~ 11:50 「『アプリケーション アーキテクチャ ガイド2.0』のガイド」猪股 健太郎さん Lv.2くまー
- 11:50 ~ 12:40 おひるごはん
- 12:40 ~ 13:10 ライトニングトーク
- 13:10 ~ 14:10 「MVVMパターンとは?」by 尾上雅則さん Lv.1くまー
- 14:20 ~ 15:20 「異なるグラフィックスAPIによるGPU サーフェイスの共有」by 川西 裕幸さん Lv.5くまー
- 15:30 ~ 16:30 「MVVMパターンの構築手法その3」by えムナウ Lv.2くまー
- 16:40 ~ 17:50 「Kinect for Windows SDK Beta の概要とNUIプログラミング」by 川西 裕幸さん Lv.2くまー
- 18:15 ~ 懇親会
2011年6月5日
#
ASP.NET Web アプリケーションではステートの管理を3段階で行っている。
1)Controlなどクライアント側でが持つ状態をViewStateとして保持しPostBackを利用する。
2)セッション毎にSessionStateとしてサーバー側に保持する。
3)複数セッションで共通に必要となる情報をApplicationStateとしてサーバー側に保持する。
サーバーが複数台ありどのサーバーにリクエストが振り分けられるかわからない場合などでは、SessionStateはデータベースに保持され、Sessionが完結した場合に消去される。
ただし完結しないままWebを閉じてしまったりする場合があるのでデータベースのSessionStateは定期的に期間超過した分を消去する必要がある。
つまり、ASP.NET Web アプリケーションではクライアントとサーバーが一体となってステートを保持する仕組みとなっている。
この間サーバーへのアクセスが入るので時間がかかるためサーバーの高速応答がストレス減少のキーとなったりする。
Silverlightアプリケーションでは サーバーにサービスを使ってステートを保持させることは可能であるが一般には行われない。
Silverlightアプリケーションでは 画面が移り変わっても内部でステートを保持しユーザーの操作が完了した場合にサーバーにサービスを使って保存する方がユーザーのストレスが少ないシステムとなる。
それではステートを保持させる機構はどこが持つのだろうか、Microsoft の Silverlight Developer Center の記事「Visual Studio 2010/Silverlight 4 ソリューション サンプル (MVVM) 編 ~ Silverlight 4 + WCF RIA Services + MVVM ~」では ViewModel に保持していて、ViewのコードビハインドがModelを保持していて(DomainContext)操作している(WCF RIA Services)。
この記事はマイクロソフトの方がMVVMパターンを使ってサンプルを作ってくれている画期的な記事だと思うが、私の考えるMVVMのあり方とはかなり違っている。
私の考えでは、ViewがViewModelを飛び越えてModelを直接操作するのではなく、コマンドを利用してViewがViewModelを呼び出してViewModelがModelを操作したほうがいいと思っている。
AAG2.0 の分類ではViewとViewModelはプレゼンテーション層のUIコンポーネントとプレゼンテーションロジックコンポーネントに該当する。
Silverlightアプリケーションでは一般にサービス層はなく、データ層は分離ストレージ用のデータアクセスコンポーネントとWCF RIA Servicesを扱うサービスエージェントとなる。
Modelはビジネス層とデータ層を意味することになる。
ユーザー入力によりViewで発生したステートはViewModelを通しビジネス層のアプリケーションファザードやビジネスコンポーネントを経てビジネスエンティティに蓄えられる。
画面遷移などによりViewで必要な情報もViewModelのリクエストでビジネス層のアプリケーションファザードがビジネスコンポーネント経由でデータ層のサービスエージェントを操作して取得しビジネスエンティティに蓄えられ、ビジネス層のアプリケーションファザードがViewModelに返却する。
ViewModel間の連携がLocatorを使って密に行われるのであればビジネス層のビジネスエンティティのプロパティ変更をViewModelで検知する必要がなく、ViewModelが配信が必要と思うViewModelの公開メソッドを呼ぶだけである。
ViewModelとビジネスエンティティのライフサイクルの違いやどのプロパティが変更されてもいちいち反応するPropertyChangedイベントのロスの大きさを考えるとプロパティ変更を層を超えてまでViewModelで検知することはお勧めしたくない。
結論としてはSilverlightアプリケーションではMVVMパターンでステートを保持するのはViewModelとModel(ビジネス層のビジネスエンティティ)である。

2011年6月1日
#
最適な布陣で臨む わんくま同盟 東京勉強会 #60 の募集を開始しました。
http://www.wankuma.com/seminar/20110625tokyo60/
パネルディスカッションも含めて豪華なメンバーです。
パネルのネタを募集します。このBlogにコメントしてください。
今回の勉強会情報
WPFやSilverlightの業務や事例は増えてはきていますしWP7でもSilverlightが使えます。
一方でWPFやSilverlightのXAML記述法や開発手法で戸惑ったり失敗したりする開発者も見かけられます。
今回は若いエネルギーに満ちている技術者とそれに負けない熟練技術者による勉強会になります。
パネルもやりますので日頃聞きたい軽い疑問も直接質問できます。ぜひ皆さんご参加ください。
2011/06/25 10:40-17:50
会場情報:東京都 渋谷区 千駄ケ谷5-27-9 新宿パークホテル2F
Telephone 03-3352-0898
アクセス情報 :
JR新宿駅 新南口 徒歩5分
JR代々木駅 北口 徒歩5分
参加料(寄付):目安1,000円 (今後のサーバ増強費、回線費、講師交通費、会場費などに充当させていただきます。よろしくおねがいいたします。)
- 10:20 ~ 開場・受付開始
- 10:40 ~ 10:50 わんくまについて
- 10:50 ~ 11:50 「『アプリケーション アーキテクチャ ガイド2.0』のガイド」猪股 健太郎さん Lv.2くまー
- 11:50 ~ 12:40 おひるごはん
- 12:40 ~ 13:10 ライトニングトーク
- 13:10 ~ 14:10 「MVVMパターンとは?」by 尾上雅則さん Lv.1くまー
- 14:20 ~ 15:20 「異なるグラフィックスAPIによるGPU サーフェイスの共有」by 川西 裕幸さん Lv.5くまー
- 15:30 ~ 16:30 「MVVMパターンの構築手法その3」by えムナウ Lv.2くまー
- 16:40 ~ 17:50 パネルディスカッション「WPF・Silverlightアプリケーションの構築法 / 最新技術習得のカギ など」
- 18:15 ~ 懇親会
パネルメンバー:
猪股さん。尾上さん。川西さん。岩永さん。neueccさん。えムナウ。
お題:
WPF・Silverlightアプリケーションの構築法
最新技術習得のカギ
2011年5月28日
#

今回のバージョンアップは WPF の Ribbon を題材に実際に作ってみてあったほうがいい機能を追加してみました。
ダウンロードはこちらからどうぞ。 http://www.mnow.jp/tabid/220/Default.aspx
作ったリボン用の図はこうなっています、こちらも6月の勉強会までにはダウンロードできるようにしたいと思います。
ダブルクリックで拡大してみれます。

1)初期化と終了化が必要かどうかののプロパティ・Command プロパティに Set を作成した
初期化を必ずすることが応用の幅を狭めているので ViewModel を参照するだけのパターンとかを作りにくい。
Command を外部に実装しておいて代入することも考慮しました。

2)PropertyのObservableCollection対応
ViewModelだけじゃなくてPropertyもMultipicityが当然必要だと思っていました。

3)ViewModel のプロパティによる初期化コンストラクタを作成するのをやめた
以下のような初期化子を使えばPropertyChangedにnullチェックや初期化フラグを入れれば問題ないので今はやめた。
継承関係を親までたどっていかないとプロパティによる初期化コンストラクタをは出来ないが今のままでは中途半端なのでいったん止めた。
xxx = new xxxxViewModel()
{
nnnn = mmmm
};
4)Inheritを作成
図としては継承関係を記述しておきたかったので作成した。

5)Locatorを作成
ViewModel に Locator がないことは 無駄なイベントハンドリングやメッセンジャーを増やす原因になるので作成した。
バージョンアップ履歴です。
1.0.0.0 => 1.0.1.0
ViewModel にプロパティがないときにエラーになるのを修正、各メソッド間の空行を修正。
1.0.1.0 => 1.1.0.0
Prism フレームワークに対応し、フレームワークなしを選ぶとちょっとのコーディングで各フレームワークに対応可能。
少しずつ日本語化。
インストーラ版を作成しました。
1.1.0.0 => 1.1.1.0
INotifyPropertyChanging, IDataErrorInfo のメソッドをBaseクラスに移動
設定不要なプロパティを見せないようにした。
ViewModel,Property,Command,EventのプロパティグリッドにXMLコメント用のプロパティを追加
インストーラ版だけの提供にしました。
1.1.1.0 => 1.1.2.0
Aggregate,Property,Command,Eventのプロパティグリッドに初期化と終了化用のプロパティを作成。
PropertyのプロパティグリッドにMultiplicityプロパティを追加してObservableCollectionに対応した。
Locatorを作成した。
Inheritを作成した。
ViewModel のプロパティによる初期化コンストラクタを作成するのをやめた。
Command プロパティに Set を作成した。
2011年5月11日
#
ViewModelDiagram インストーラ版 1.1.1.0 UPしました。
1.0.0.0 => 1.0.1.0
ViewModel にプロパティがないときにエラーになるのを修正、各メソッド間の空行を修正。
1.0.1.0 => 1.1.0.0
Prism フレームワークに対応し、フレームワークなしを選ぶとちょっとのコーディングで各フレームワークに対応可能。
少しずつ日本語化。
インストーラ版を作成しました。
1.1.0.0 => 1.1.1.0
INotifyPropertyChanging, IDataErrorInfo のメソッドをBaseクラスに移動
設定不要なプロパティを見せないようにした。
ViewModel,Property,Command,EventのプロパティグリッドにXMLコメント用のプロパティを追加
インストーラ版だけの提供にしました。
ここからダウンロードしていただけます。
http://www.mnow.jp/tabid/220/Default.aspx
2011年5月6日
#
ViewModelDiagram インストーラ版 1.1.0.0 をUpしました。
http://www.mnow.jp/tabid/220/Default.aspx
追加-新しい項目で下の方に ビューモデルダイアグラム の選択が出てきます。
ダウンロードして2011/5/6のインストールパッケージなら大丈夫です。
2名様に人柱になってもらいました。
感謝します。
ViewModelDiagram インストーラ版 1.1.0.0 をUpしました。
http://www.mnow.jp/tabid/220/Default.aspx
こちらは VisualStudio拡張機能インストーラ vsix ではなく VisualStudioセットアッププロジェクトで作成してあります。
この関係でレジストリを設定でき、TTファイルを外だしではなく内蔵することに成功しました。
機能は変わりませんので vsix 版と同様に使えると思います。
TTファイルを右クリックしてカスタムツールの実行を選択 という手順が省かれる分だけ簡単で間違いないと思います。
2011年5月4日
#
ViewModelDiagram 1.1.0.0 をUPしました。
http://www.mnow.jp/tabid/220/Default.aspx
今回の更新で以前の vmcd ファイルや tt ファイルと互換性がなくなっていますので注意してください。
更新点は以下の通りです。
1.0.0.0 => 1.0.1.0
ViewModel にプロパティがないときにエラーになるのを修正、各メソッド間の空行を修正。
1.0.1.0 => 1.1.0.0
Prism フレームワークに対応し、フレームワークなしを選ぶとちょっとのコーディングで各フレームワークに対応可能。
少しずつ日本語化。
0)今までのバージョンをインストールしてあればアンインストールしてください。
今回の vsix をインストールします。


1)MVVM Light Toolkit や Prism などのフレームワークでプロジェクトを作成します。
2)出来上がったプロジェクトのViewModelフォルダに新しい項目 ビューモデルダイアグラム を追加します。
vmcd ファイルと tt ファイルが作成されます。
3)vmcd ファイルを開いてフレームワークのプロパティでフレームワークを選択します。
4)ツールバーの ViewModel を Drag & Drop します。
5)Aggregation をクリックして ViewModel の管理をする ViewModel間 で Drag & Drop します。
6)必要なプロパティを作成します。
7)保存後、ttファイルを右クリックしてカスタムツールの実行を選択します。
8)tt ファイルの下に ViewModel1.Generated.cs などの cs ファイルができます。
9)フレームワークのプロパティで None を選択した場合は以下の Livet の例のように ViewModelDiagram1.cs など名前で選択した vmcd ファイルの拡張子を cs に変えたコードファイルを追加します。
(Livet はこちらを参照してください。 http://ugaya40.net/developenviroment/livet.html )
10) ViewModelDiagram1.cs の中身はフレームワークに合わせて以下のようにコーディングします。
(このコーディングは MVVM Light Toolkit や Prism はあらかじめされています)
Livet の場合はこのようにコーディングします。
namespace VmcdSample.Livet
{
public partial class ViewModelDiagram1 : global::Livet.ViewModel
{
public virtual void Cleanup()
{
}
protected void RaisePropertyChanged<T>(string propertyName, T newValue, T oldValue, bool broadcast)
{
base.RaisePropertyChanged(propertyName);
}
public class RelayCommand : global::Livet.Command.DelegateCommand
{
public RelayCommand(System.Action execute, System.Func<bool> canExecute)
: base(execute, canExecute)
{
}
}
public class RelayCommand<T> : global::Livet.Command.DelegateCommand<T>
{
public RelayCommand(System.Action<T> execute, System.Func<T, bool> canExecute)
: base(execute, canExecute)
{
}
}
}
}
2011年5月1日
#
WPF/Silverlight/スレートPC の開発を行う上でのユーティリティやツール類をまとめておく。
スレートPC の Windows7 Sensor Platform API の解説と紹介
.net で Windows7 Sensor Platform API
http://blogs.wankuma.com/mnow/archive/2010/12/06/195517.aspx
MvvmLightBehavior
WPF・SilverlightでMVVM開発を行うためのビヘイビアー用のユーティリティ
http://blogs.wankuma.com/mnow/archive/2011/01/10/196366.aspx
ViewModelDiagram
WPF・SilverlightでMVVM開発を行うためのViewModelをDSLでRAD開発するためのツール
http://blogs.wankuma.com/mnow/archive/2011/04/24/198621.aspx
縦書き TextBlock
縦書き文字列を表示できる TextBlock です。
http://blogs.wankuma.com/mnow/archive/2010/12/30/196154.aspx
2011年4月30日
#
Visual Studio Visualization and Modeling SDK で DSL を作成するのが簡単になったので作っているわけですが、日本語リソースがインストールできない問題が発生していました。
0)Visual Studio SP1 ・ SDK SP1 ・ Visual Studio Visualization and Modeling SDK をインストールする。
1)新しいプロジェクトを作る。

一番シンプルなのを選択。

3)できたソリューションの自動作成された resx をコピーして ja-JP.resx を作る。

4)ビルドするとリソースのサテライトアセンブリができる。
この場合は ja-JP フォルダの Mnow.MvvmLight.Tool.ViewModelDesigner.Dsl.resources.dll
extension.vsixlangpack や Mnow.MvvmLight.Tool.ViewModelDesigner.DslPackage.resources.dll はインストーラ自体の作成した日本語リソースでこちらは問題なくインストールされる。

5)vsix インストールファイルができるのでインストールしてみると Mnow.MvvmLight.Tool.ViewModelDesigner.Dsl.resources.dll はインストールされない。
インストールされないので DSL が日本語で表示されない。
6)以下の図のDSLの参照設定のプロパティを開く

7)Output Group Included in VSIX の 「BuiltProjectOutputGroup;」 を 「BuiltProjectOutputGroup;SatelliteDllsProjectOutputGroup」 に修正するとvsix インストールファイルに日本語リソースサテライトアセンブリが追加される。

8)vsix インストールファイルをインストールしてみると Mnow.MvvmLight.Tool.ViewModelDesigner.Dsl.resources.dll はインストールされる。
インストールされるので DSL が日本語で表示される。
めでたしめでたし。
苦労した日数丸2日。
今までで一番の量の英語のサイトを読んだ気がする。
後になって日本語で探してみたらこんなページが見つかる。出力グループのところにちらっと書いてある。
http://msdn.microsoft.com/ja-jp/library/ms171468(v=VS.100).aspx
2011年4月24日
#
わんくま東京勉強会#58 あふたけあ で振られていていろんな人から突っつかれるのもかなわんのでひとつのtemplateから複数のコード生成する簡単な方法を書いておきます。
既存の EF.Utility.CS.ttinclude には EntityFrameworkTemplateFileManager がすでにありますのでこれを使います。
hostspecific="true" や EntityFrameworkTemplateFileManager が重要です。
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
base
<# fileManager.StartNewFile("a.Generated.txt"); #>
a
<# fileManager.StartNewFile("b.Generated.txt"); #>
b
<# fileManager.StartNewFile("c.Generated.txt"); #>
c
<# fileManager.Process();
#>
ViewModelDiagram を公開します。
私のPPT置き場にViewModelDiagramという名前でj公開しています。
http://www.mnow.jp/tabid/220/Default.aspx
使い方。
1)MVVM Light Toolkit のプロジェクトを作成します。

2)出来上がったプロジェクトのViewModelフォルダに新しい項目 ViewModelDiagram を追加します。
Vmcd ファイルと tt ファイルが作成されます。

3)Vmcd ファイルを開いてツールバーの ViewModel を Drag & Drop します。
4)Aggregation をクリックして ViewModel の管理をする ViewModel間 で Drag & Drop します。

5)必要なプロパティを作成します。

6)保存後、ttファイルを右クリックしてカスタムツールの実行を選択します。

7)tt ファイルの下に ViewModel1.Generated.cs などの cs ファイルができます。
//------------------------------------------------------------------------------
// <auto-generated>
// このコードはツールによって生成されました。
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
// コードが再生成されるときに損失したりします。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using System.Linq;
namespace ViewModelDiagramSample.ViewModel
{
#pragma warning disable 1591
public partial class ViewModel1 : ViewModel1Base
{
}
public partial class ViewModel1Base : ViewModelBase, INotifyPropertyChanging, IDataErrorInfo
{
public ViewModel1Base()
{
InitializeCommand();
}
public ViewModel1Base(
int property1
)
{
_property1 = property1;
InitializeCommand();
}
public override void Cleanup()
{
base.Cleanup();
CleanupCommand();
CleanupViewModel();
}
private int _property1;
protected virtual void OnProperty1Updating(int value) {}
protected virtual void OnProperty1Updated() {}
protected virtual void OnProperty1Changing(int value) {}
protected virtual void OnProperty1Changed() {}
public int Property1
{
get
{
return _property1;
}
set
{
int oldValue = _property1;
OnProperty1Updating(value);
if (_property1 != value)
{
OnProperty1Changing(value);
OnPropertyChanging<int>("Property1", value, oldValue);
_property1 = value;
OnPropertyChanged<int>("Property1", value, oldValue);
OnProperty1Changed();
}
OnPropertyUpdated<int>("Property1", value, oldValue);
OnProperty1Updated();
}
}
public ViewModel2 ViewModel2 { get; set; }
public System.Collections.ObjectModel.ObservableCollection<ViewModel3> ViewModel3Collection { get; set; }
private void CleanupViewModel()
{
if (ViewModel2 != null)
{
ViewModel2.Cleanup();
ViewModel2 = null;
}
if (ViewModel3Collection != null)
{
foreach (var viewmodel in ViewModel3Collection)
{
viewmodel.Cleanup();
}
ViewModel3Collection.Clear();
ViewModel3Collection = null;
}
}
private RelayCommand _command1;
public RelayCommand Command1
{
get
{
return _command1;
}
}
protected virtual void OnCommand1Excec() {}
protected virtual bool CanCommand1Excec() { return true; }
private void InitializeCommand()
{
_command1 = new RelayCommand(OnCommand1Excec, CanCommand1Excec);
}
private void CleanupCommand()
{
_command1 = null;
}
public event EventHandler Event1;
protected void RaiseEvent1(EventArgs args)
{
if (Event1 != null)
{
Event1(this, args);
}
}
public event PropertyChangingEventHandler PropertyChanging;
[SuppressMessage("Microsoft.Design", "CA1030")]
protected virtual void RaisePropertyChanging<T>(string propertyName, T oldValue, T newValue, bool broadcast)
{
RaisePropertyChanging(propertyName);
if (broadcast)
{
Broadcast(oldValue, newValue, propertyName);
}
}
[SuppressMessage("Microsoft.Design", "CA1030")]
protected virtual void RaisePropertyChanging(string propertyName)
{
VerifyPropertyName(propertyName);
if ((this.PropertyChanging != null))
{
this.PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
}
protected virtual void OnPropertyChanging<T>(string propertyName, T newValue, T oldValue)
{
RaisePropertyChanging<T>(propertyName, newValue, oldValue, false);
}
protected virtual void OnPropertyChanged<T>(string propertyName, T newValue, T oldValue)
{
RaisePropertyChanged<T>(propertyName, newValue, oldValue, false);
}
protected virtual void OnPropertyUpdated<T>(string propertyName, T newValue, T oldValue)
{
}
private Dictionary<string, string> _errors = new Dictionary<string, string>();
public virtual bool HasErrors
{
get { return (_errors.Count != 0 || Error != null); }
}
public virtual string this[string columnName]
{
get
{
return (_errors.ContainsKey(columnName) ? _errors[columnName] : null);
}
}
public virtual string Error
{
get { return null; }
}
public virtual Dictionary<string, string> Errors
{
get { return _errors; }
}
}
#pragma warning restore 1591
}
問題や要望があればこの記事にPOSTしてください。
2011年4月19日
#
わんくま同盟 東京勉強会 #58 ようにこんなものを作っている。
なんだかは わんくま同盟 東京勉強会 #58 のデモまで内緒。

わんくま同盟 東京勉強会 #58
http://www.wankuma.com/seminar/20110423tokyo58/
2011/04/23 10:10-16:30
会場情報:東京都新宿区歌舞伎町1-18-5 白馬車ビル2F にじゅうまる新宿コマ店
Telephone 050-5815-4326
アクセス情報 :
JR新宿駅 東口 徒歩4分
西武新宿駅徒歩1分
参加料(寄付):目安1,000円 (今後のサーバ増強費、回線費、講師交通費、会場費などに充当させていただきます。よろしくおねがいいたします。)
- 09:50 ~ 開場・受付開始
- 10:10 ~ 10:20 わんくまについて
- 10:20 ~ 10:50 ライトニングトーク
- 10:50 ~ 11:40 「電子工作の二歩目」しょーへーさん Lv.1くまー
- 11:40 ~ 12:40 おひるごはん
- 12:40 ~ 13:30 「LightSwitch でエクステンション作成」by インフラジスティックス 池原さん Lv.2くまー
- 13:40 ~ 14:30 「MVVMパターンの構築手法その2」by えムナウ Lv.2くまー
- 14:40 ~ 15:30 「『特殊相対性理論の紹介』~SketchFlowでの資料作成も紹介~」by 遥佐保さん Lv.1くまー
- 15:40 ~ 16:30 「三年後の状態遷移」by επιστημη Lv.2くまー
- 17:00 ~ 懇親会