完全な雑談です。 「咲-saki-」という漫画/アニメをご存じでしょうか?高校生が麻雀大会で全国決勝を目指すっていう話なのですが、「けいおん!」に近いというか、大会のナレータ役が「らき☆すた」のあれだったりと、なんか違和感がないので。DVDで見ていたりするのですが。いや、違和感がないのほうが普通じゃないですが(苦笑 さて、現時点で漫画のほうは読んではいませんが、アニメのほうはいわゆる萌え系の絵でストーリーも多少そんなところもあります。しかし、ん~、この高校大会って感触は、ひょっとすると、、、「ドカベン」に似ているのでは!?と思った人は、私だけではないハズハズハズ……私だけですかねぇ。 麻雀漫画ですから、役なり流れなり論理思考っぽいとろが出てきます。でも主人公の咲が嶺上開花で上がり捲るあたり、あの哭きの竜の彷彿とさせますが、あちらのほうは一人が戦う個人戦(つーか、やくざの世界だけど)。でも、咲の世界は高校選手権=団体戦っていうあたり、そして、嶺上開花という特技(?)を持っているあたり、サヨナラホームランを武器(?)とする山田太郎にそっくりです! そして!、チーム戦ですから、相手の高校にもすごい技を持っている人いるんですよね。ステルスモードとか海底摸月狙いだったり、地獄待ちだったり、ネット麻雀と得意とする論理思考だったり、と(見た人は分かるよね)。 このあたりも、坂田三吉とか不知火とか岩鬼とか殿馬とか、野球のルールに則った得意技を持つキャラがいますよね(見た人は分かるよね!)。 そして、更におもしろいのはそれぞれのキャラに何らかの設定(過去)があって、それを踏まえて今の得意技があるってところです。ここらあたりもドカベンと似ていて、厚みっというかその取って付けた過去に好感が持てます。というか、水島新司の創始がそれだけすごいわけですが、この咲の原作者/脚本家/スタッフも偉いですよね。 チームで県予選から全国を目指すってところ、スラムダンクにも似ています。アタックナンバーワンもそうですね。あいにくスラムダンクには詳しくないので、比較している人/サイトがいると有り難いかな(本当にありがたいのか?)。 と思ったら、いました、いましたスラムダンク風に解説しています。 http://d.hatena.ne.jp/tatsu2/20090908/p1 http://ameblo.jp/yorunoyogiri/entry-10327255685.html ぜひ、ドカベン風にも語って欲しいものです。
これまでのテストをするためにUnitTestを使っていますが、所謂↓を使っています。 Silverlight Unit Test Framework http://code.msdn.microsoft.com/silverlightut/ ロジックだけであれば、NUnitとかMicrosoftが提供するTest Frameworkを使えばいいのですが、画面が絡むと途端に面倒になるので。 さて、この「Silverlight Unit Test Framework」ですが、ダミーでボタンをぽちぽち押してくれるようなタイプではありません。先のエントリを見ると分ると思いますが、他のUnitTestと同様にメソッドを羅列していきます。 なので、画面のフォーカス/アウトフォーカスみたいなイベントを取れません。 まあ、本当はそれで動かないと駄目なんですけど、試してみると画面の動きが違ったりして(特に間違ったDataContextの指定の仕方とかすると)なにかとややこしいのですが。 このあたりのイベント絡みをやるためには、別途javascriptとかを組まないと駄目そうですね。 画面のほうは、至ってシンプルです。 ただし、テスト結果がブラウザ上でしか確認できないので、自動化には向いていないそうです(というブログがありました)。 さて、使い始めは何事も躓きやすいのでポイントだけ示しておきます。 ■プロジェクトを3分割する UnitTestをする場合、プロジェクトを3つに分けます。 ・テスト対象のプロジェクト(SampleTextBinding) ・テストプロジェクト(SampleTextBinding.Test) ・テスト実行のプロジェクト(SampleTextBinding.Test.Web) 画面やロジックしてあるのは SampleTextBinding のプロジェクトです。 出来る限りここには手を加えないようにします。 テストプロジェクトは TestCase を書いていきます。 テスト実行のプロジェクトはWebのプロジェクトです。テストプロジェクトと一緒にしてもいい気もしますが、なんかうまくいかないので、別々にしました。 ■テストプロジェクトに3つの参照を追加する 最初にテストプロジェクトに手を入れます。 参照設定に以下のアセンブリを追加します。 ・Microsoft.Silverlight.Testing ・Microsoft.Silverlight.Testing.Framework ・Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight ■テストケースを作る テストケースのひな形は、マイテンプレートから「Silverlight Test Case」で追加してもよいですし、 次のひな形を使っても構いません。 using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using SampleTextBinding; using Microsoft.Silverlight.Testing; using System.ComponentModel; namespace [...]
さて、Silverlight+MVVMの話の続きです。 単純に xaml のコントロール名を使えば楽なのですが、MVVM に則るといちいち{Binding なんとか}を書かないといけません。Binding の構文は、定型といえば定型なのですが、View の中に乱立するのがいまいち解せません。 解せない理由はと言うと、 ・そもそも View と Model を分離して View はデザイナ、Model はプログラマ、と切り分けができるのではなかったか? ・View 自体は Microsoft Exprssion Blend を使って編集するわけだから、いちいち Binding の分が書いてあるのはどうかと思う。 ・間違って消しちゃったら、Binding は直すの大変。ここのコードを書くのはプログラマなんだから、Viewに手を加えるの問題あり。 というわけで、xaml のほうに Binding を書くのは、かなり解せないのです。 勿論、xaml に書かずに済ますには?というか、方法を模索しないといけないわけで、そうなると対応する *.xaml.cs に書くのがいいですよね。 <Grid x:Name="LayoutRoot" Background="White"> <StackPanel> <Button Name="BtnSave" Width="100" Content="保存" Click="BtnSave_Click" /> <TextBox Name="TextName" Width="100" Text="{Binding LastName, Mode=TwoWay}" /> <TextBox Name="TextOut" Width="100" [...]
落とし穴シリーズ(にするつもりは無いのですが)の続きです。 本当は、動的バインドの話を書こうと思ったのですが、ItemsSourceプロパティにバインドするときの注意を忘れてました。 DataGrid コントロールのItemsSourceプロパティには、配列やListコレクションなどが渡せます。最近はジェネリックの流行りが功を奏して(かな?)、Listを渡す場合が多くなっています。 実は IList と List の違いどころを間違えるとややこしいことになるのですが、それは別の機会には話します。型チェックのキャストでは List の方が不利なんです。型が2つあるからね。 さて、先日のDataGridのソースでは List を渡しました。 ページクラスのコンストラクタを改めてみてみると、次のようになっています。 public PageGrid() { InitializeComponent(); MyModel = new ModelGrid(); this.DataContext = MyModel; // コレクションを作成 List<Product> list = new List<Product>(); list.Add( new Product(){ ID="001", Name="Silverlight 3" }); list.Add( new Product(){ ID="002", Name="Visual Studio 2010" }); list.Add( new Product(){ ID="003", Name="Expression Bend 3" [...]
動的バインドの話を書こうと思ったのですが、DataGrid のバインドの落とし穴の件を書くことにします。 多分、検証結果を具体的にみるほうが「何故だめなのか?」がわかりやすいので。 先に注意しておきますが、ここに書くのは「やってはいけない」方法です。 さて、ItemSource プロパティにバインドする場合は、前回書いたように即時実行が行われます。 これを「楽だから」という理由で、DataContextを使ってコントロール自身にバインドしてみましょう。 xaml ファイルを次のように設定します。 <Grid x:Name="LayoutRoot" Background="White"> <StackPanel> <dt:DataGrid Name="DGrid" Width="300" Height="200" DataContext="{Binding DGridData, Mode=TwoWay}" /> <Button Name="BtnSearch" Width="100" Content="検索" Click="BtnSearch_Click"/> </StackPanel> </Grid> DataContext=”{Binding DGridData, Mode=TwoWay}” しているところが、バインドです。 モデルクラスはこんな感じになります。 /// <summary> /// モデルクラス /// </summary> public class ModelGrid2 : INotifyPropertyChanged { /// <summary> /// グリッドのデータ /// </summary> private DataGrid _DGridData = [...]