2014年04月30日

【WPF基礎】脱WPF初心者のための基礎知識 その1〜DataContextってなんぞ?〜

C#におけるxamlデータバインディングは、大変便利、超便利、これを覚えるとFormアプリケーションなんて使ってられない、JavaでGUI?バカジャネーノ?と暴言吐きたくなるくらい便利なものなのですが、いかんせん癖が多く、使ってはみたものの、こういう時はどーすりゃいいの?全然バインドされないんだけど・・・となって作業が中断されてしまうことがよくあります。


ひとえにコレは、xamlデータバインディングの考え方への理解が不足しているために起こる現象です。

xamlデータバインディングプログラミング分野において、脱初心者するにあたって、なぜ中々理解が進まないのか、と自分なりに考えてみたのですが、

xamlデータバインディングの基本的な「コードの書き方」を解説しているサイトはあるのですが、「考え方」を解説しているサイトが少ないからだと思っています。


というわけで、今回以降、しばらくは「xamlデータバインディングにおける考え方」を解説してみます。

では初回のテーマ。データコンテキストについて。


★xamlとMVVM

xamlデータバインディングにおいて、切っても切れない関係にあるのが、MVVM(Model-View-ViewModel)パターンの存在です。

MVVMって一体何者なのか、の基礎については適当にMVVMでググれば解説が出てきますのでそちらにお任せします。本ブログは脱初心者ブログなのでその辺はガッツリ省略!

ここではxamlとMVVMとの関係についてお話します。


MVVMにおけるxamlは、View部分に相当するものですが、xaml内に{Binding}を記述することで、

ViewModelが保持するプロパティ値をViewに反映する、コレが考え方の基本です。


でもこのViewとViewModel間でのデータの受け渡し、実際にはどうやってやってるんでしょう?

MVVM、xamlなどのキーワードでググると、だいたいこんな感じのコードが掲載されてると思います。



xxx.DataContext = hoge;


このコードの意味は、「オブジェクトxxxのデータコンテキストに、hogeオブジェクトを設定する」です。

・・・うん、コードに書いてることを日本語に直しただけですね。

ですがこの日本語を読んでみて、何を言っているかちゃんと理解できますか?なんかモヤッとしてませんか?

特に「データコンテキスト」の部分です。一体、データコンテキストってなんだ?


★データコンテキストってなんぞ?


データコンテキスト、DataContext・・・

この単語が理解できないのは、「コンテキスト」が理解できてないためです。

ではコンテキストってなんでしょう?翻訳サイトで翻訳するとこんな感じの意味が出てきます。


[具体的には ]
1 (文章の)前後関係,文脈,脈絡,コンテキスト.→
2 〔ある事柄の〕状況,環境 〔of〕.→
ラテン語「共に織られたもの」の意 (CON‐ text‐, textus 「織られたもの」); contextual


この翻訳結果から推測するに、データ・コンテキストとは、データ状況、データ環境、みたいな意味なのだなあ、と思われます。

これに則ってコードを英文にしてみると、xxx.DataContextは、「DataContext of xxx」

ということは、先ほどのコードを日本語に再翻訳すると

「xxxオブジェクトのデータ環境をhogeオブジェクトに設定します」

となります。

つまり、

「xxxオブジェクトが扱うデータはhogeオブジェクトが持っているので(データ環境の実体はhogeオブジェクト)、DataContextを通してアクセスする」

という意味となります。


どうです?DataContextが何者なのかの理解が深まったと思いませんか?


これを踏まえると、ViewとViewModel間でのデータの受け渡しをどうやっているかが見えてきますね。

ViewとViewModelは、DataContextという「データ環境」を介してデータのやり取りをしているのです。


今回は長くなってしまいました。

ですが、脱初心者をするにあたっての障害は、こういう何気なく使われている単語への理解が浅いために起こっているのです。

一つ一つ基礎を理解して、真の中級者に向けてステップアップしていきましょう。
posted by おっさん at 12:46 | Comment(0) | 【C#】WPF基礎 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。