DataContextとBinding-XAMLだけで実現

簡単なサンプル変更を反映するで説明したコードでは、DataContextをコード内で、

のように実装していましたが、XAML内のリソースとして宣言し、利用する方法を説明します。
ただし、利用していたCustomerクラスのコンストラクタでは、引数(姓、名)が必要だったのですが、今回説明するのには都合が悪いので、引数の無いコンストラクタを実装したクラスを利用する事にします。
コンストラクタに引数がある場合の利用方法は、ObjectDataProvider?で説明します。

コンストラクタに引数が無いCustomerクラス bookmark

このように、コンストラクタでは何もしないクラスを利用します。

XAMLコード bookmark

上記のCustomerクラスを利用したXAMLは以下のようになります。

ここで重要になるのが、5行目のxmlns:local="clr-namespace:WindowsApplication1"です。
これは、XAML内でCustomerクラスを利用できるようにする為に、名前空間を対応付けしています。WindowsApplication1はVBでのアプリケーション作成時のデフォルトで利用される名前空間なので、実際に利用する時には、対応する名前空間を指定してください。
localはXAML内から利用する名前(エイリアスみたいなもの?)なので、分かりやすい名前を自由に付けてください。
7-9行目で、Customerクラスを参照するMyCustomer?と言う名前のリソースをWindowに追加し、同時にFirstName?LastName?に値をセットします。
10行目で、GridのDataContextにリソースMyCustomer?を設定しています。

このようにすれば、コード内でDataContextをセットするコードを記述しなくてもよいわけです。目的に沿ってXAMLで行うか、コード内で行うかは判断して下さい。

XAMLのリソースをコードで利用 bookmark

変更を反映する?と同じ事を、CustomerがXAML内のリソースで宣言された場合にはどうするのか?
それは、FindResource?メソッドを利用する事により解決できます。

XAMLコード bookmark

コード bookmark

10行目でMyCustomer?と言う名前のリソースを取得して、それを利用すればいいわけです。
おいおい、XAMLだけで実現というタイトルに沿わないじゃないかと・・・思われます?
CDATAセクションを利用すれば、XAMLコード内にプログラムコードを埋め込む事ができます。

このようにすれば、コードビハインドファイルにプログラムコードを書かなくても、実現する事ができるのです。
単純な処理であれば、XAMLに埋め込むのもいいですが、複雑な処理を行う場合は、コードビハインドファイルに記述するのがいいのではないでしょうか。
ちなみに、CDATAに記述する場合は、インテリセンスは効きませんので・・・

コメント bookmark