chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

メモ;Visual Studio 2015をインストール、日経ソフトウエア8月号のサンプルを打ち込んでみる、、エラー → なんとか解消

VisualStdio 2015がリリースされたので入れてみる。(PCには古いバージョンがインストールされた状態、多分Visual Stdio 2013)

ダウンロードサイトVisual Studio 2015 Communityを選択すると、インストーラ(file:vs_community.exe)がダウンロードされる。インストーラを実行

延々とダウンロードとインストールが行われ、PCを再起動。再起動後はアクティベーションの画面が出るらしいが、いつものデスクトップの画面が出るだけで、どうやったらVisualStudio2015のアクティベーションが行えるのか分からず。。

しょうがないので、、ダウンロードフォルダに残っていたインストーラを再度実行。また延々とインストールが実行されるが、これは一回目のインストールに対する追加作業なのか、それとも、再度上書きでインストールしているだけなのか。。
しばらくしてcompletedとか表示されて終わった。。その後、音沙汰なし。

IDEの起動ファイルをぐぐって探すのもありですが、、古いバージョンのC#のプロジェクトをダブルクリックすると、「他のアプリケーションもあります」と表示されたので、VisualStudio2015を選択、するとアクティベーションのダイアログが表示された。MSアカウントを入力して承認してもらう。

再度、C#のプロジェクトを起動すると、でVisualStdio2015版が起動された。結果オーライでこれでよし。

2015とC#の勉強を兼ねて、日経ソフトウエア8月号の、「デジタル時計を作成する」を打ち込んでみた。いろいろ自分のミスもあったけど、なんとか動くようになったが、今度はエラーが出るようになった。

エラーの内容は以下で、Xamlのパージングにおいて、TextBoxへのSetで例外だと言っている。なぜか??


Exception thrown: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll
Additional information: 'プロパティ'System.Windows.Controls.TextBox.Text' の Set で例外が
スローされました。' 行番号 '13'、行位置 '85'。
原因を掘り下げるべく、、View DetailメニューでExcelptionの中身を探ってみる。。InnerException>Messageにおいて以下の表示があり。

TwoWay または OneWayToSource バインドは、型 'MClock.ClockViewModel' の
読み取り専用プロパティ 'DigitalDisplay' では動作できません。
これの言ってることは、プロパティ:DigitalDisplayが読み取り専用になってるからだめですということのようで、確かに、サンプルソースでは、MyClockのプロパティ、DigitalDisplayに対して、SetはPrivateに設定している。これが原因かと。そこで、、Private Set となっているのをPrivateを削除して公開メソッドに変更(雑誌で言うと、P49のリスト4、リスト中央付近の、 private set // 設定(クラス外から使わないのでprivatte) の行)。

再度走らせてみると正常に動作した。

まとめ(気づき)

  • VisualStudio2015のインストールは、2013がすでに入ったせいなのか、インストールステップが途切れ途切れで最後はほったらかし(アクティベーションの画面も出ないし、スタート画面やデスクトップに起動アイコンが出ない)で終わった。
  • サンプルを通してWPFを初めて使ったけど、データバインディングの手法を使っているせいなのか、xamlで設定する箇所が多くて、手で書き込む必要があり、まだこなれていない印象です(プロパティ名を間違って指定するとエラー出ないけどViewModelと連携されない)。といっても、WPFのコンセプトとかWPFを使うことで得られる恩恵とか全然分かってないので、そんな事かくとボケかと言われるかもしれませんが。

■追記(150726)
サンプルではアナログ時計の針をXAMLで表現して、データバインディングの手法でViewModelから操作するというコードが紹介されてるので作ってみた。そのままでは面白くないのと、XMLを手で打ち込むのが面倒なので、ツールボックスウィンドウのEllipseコントロールを貼りつけた。すると、必要なXMLは自動で挿入された。また、、色とかサイズもGUIで操作できるので、打ち込む手間が省ける。さらに、、サンプルでは手でBindingを書き込むことになってるけど、これもGUIでできるようであった。(自分は成功していませんが、GUIのメニューを使って、DataContextのPathをプルダウンメニューで選べるようになっている。さすがMSのIDEだ。ちゃんと仕上げられている。)

まとめⅡ(気づき)

  • WPFGUIの見た目を静的に表現可能で、ややこしい描画のための手続きはIDE任せにできる。また、GUI等のデザインとロジックを完全に分離できるのでソフトウエアが簡潔に表現可能となり再利用性が高まる。
  • 最初、XAMLは手書きでいろいろ設定が必要と書いたけど、データバインディング等はGUIで設定可能。こなれていないというコメントは撤回します。
  • WPFはパワフルだけど、どこまでが静的表現で済ませられて、どこから手続きを記述必要になるのかまだちょっと分かっていない。特徴を生かし切るには、コンセプトとか使用例をよく読んで情報を得る必要あり。知らないままゴリゴリ作ると、いままでのプログラミングモデルから抜け出せない。
  • 総じて、WPFは面白い。。今後はできたらWPFで実装したい。

■追記
やっぱり気になって調べたら、IDEの起動パスは以下であった。


C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe