英語で言うとアルティメット・ガッカリ・エクスペリエンス。かっこいい!
WPFやSilverlightではData Bindingっていう機能があるんですよ。たとえば、
<TextBlock Text="{Binding fps}" />
とかいうxaml*1があった時に、実行時にDataContextプロパティに設定したオブジェクトのfpsプロパティを勝手に拾って表示してくれるんです。ちょっといじれば表示だけじゃなくて編集もできたりします。
これは便利*2なんだけど、プロパティの検索はCLRの静的な型情報から拾ってくるためにIronRubyなんかの動的オブジェクトではそんなプロパティねぇよと思われてしまって使えない。
しかし、.NET4からはDynamicオブジェクトがCLRに導入されました。そうなると当然WPF4でもDynamicオブジェクト対応してくれるので、Data BindingでもIronRubyのオブジェクトから動的にプロパティとか検索してくれるようになったよ!やった!
CLR4ベースのSilverlight4でもDynamicが追加されてるので、昨日頑張ってSilverlight4用のIronRubyをビルドして使えるようにした。
今朝になって使ってみたら色々やってもどうにも表示してくれない。ドキュメント見ても特に何も書いてないんだよなぁ。DLRについてはCodeplex見てねとか投げっぱなしだし。
いろいろ調べてたらWPF4のドキュメントにData BindingのソースにはDynamic Objectが使えるよ、ってちゃんと書いてある。ほら使えるって書いてあるじゃん!…ん?WPFには書いてある?
Silverlight4のドキュメントにはどこにも書いてないですね。確かに使えないとは書いてないけど、使えるとは一言も書いてないですね。WPF4のドキュメントには明確に使えるって書いてありますけど。
つまりそういうことだ。WPF!=Silverlight。WPFとSilverlightは見た目が似てるからって、WPFで使える機能がSilverlightで使えるとは言っていない。SilverlightにわざわざDynamicオブジェクト対応を追加したからってそれがData Bindingで使えるなんて一言も言っていない。ちくしょう…っ!
という最高のがっかり体験を朝から味わいました。
ちなみにSilverlight4 RCでの話なのでSilverlight4が完成した暁にはData Bindingできる可能性が無いとは言えません。でももう今月出るんでしょ?無さげー。
いやマジでSilverlight4がっかりなんですけどどうすればいいんでしょう。RichEditTextと右クリックとコピペ対応という今まで無かったのは不思議な物が対応されてるんで意味無いとまではいいませんけど。
結局C#専用だったんだ…。DLRなんて幻だったんだ。
がっかりついでに、Silverlight4のドキュメント見てたらWindows Phone7用のSilverlightは3ベースな上に使えるアセンブリに超制限がかかっててDLRも動きませんって書いてあった。ほらがっかり。