続・これからはじめるSilverlight 4 10

ロジックコードを記述する

ロジックコードを記述する

リスト4のようにロジックコードを記述します。

リスト4: ロジックコード(MainPage.xaml.vb)

LINQ to XMLでXMLを処理するクラスの含まれるSystem.Xml.Linq名前空間をインポートします。StringBuilderクラスを使って文字列の追加を行いますので、このクラスの含まれるSystem.Text名前空間をインポートします。また、ファイルの入出力に関するクラスの含まれるSystem.IO名前空間もインポートしておきます。

PersonalInfoクラス内に「氏名、年齢、住所、勤務先」のプロパティを定義しておきます。

新しいStringBuilderのインスタンス、myDataとgridHeaderメンバ変数を宣言します。StringBuilderクラスは、文字を追加、削除、置換または挿入して値を作成した後に、その値を変更できるクラスです。

■ページが読み込まれた時の処理

XElement.LoadメソッドでXML文書ファイル(sampleData.xml)を読み込みます。要素のコレクションを取得するクエリ(query)を定義します。PersonalInfoクラスの新しいリストとして作成するmyPersonalInfoを宣言します。

queryを実行します。クエリコレクション内を反覆処理しながら、PersonalInfoクラスの各プロパティ(「氏名」、「年齢」、「住所」、「勤務先」)に、、、、要素の値を追加します。DataGridコントロールのItemsSourceにmyPersonalInfoオブジェクト指定します。DataGridコントロールにXMLデータがバインドされて表示されます。

StringBuilderクラスのインスタンスとして生成した、gridHeaderオブジェクトに、AppendメソッドでDataGridのヘッダの値を、カンマ区切りで、追加しておきます。このままだと末尾にもカンマが追加されますので、末尾のカンマは削除する処理を行います。

■DataGridコントロールのデータ項目が選択された時に発生するイベント

選択されたPersonalInfoクラスの「氏名」、「年齢」、「住所」、「勤務先」をカンマ区切りで、StringBuilderのインスタンスmyDataにAppendメソッドで追加していきます。

■ContextMenuから「コピー」が選択された時の処理

myData変数内の文字列をクリップボードに格納します。SetTextメソッドはクリップボード内にUnicodeテキストを格納するメソッドです。

■ContextMenuから「貼り付け」が選択された時の処理

クリップボードの中が空でない場合は、GetTextメソッドでクリップボード内のデータにアクセスして、TextBox1内にデータを貼り付けます。

■DataGridコントロール内で、マウスの右ボタンが押されたときの処理

マウスの右ボタンでクリックされたXとYの位置を、変数myXとmyYに格納しておきます。 SetValueメソッドで、ContextMenuコントロールの表示位置を設定し、ContextMenuコントロールのIsOpenメソッドにTrueを指定してContextMenuを表示します。アイコン付きのメニュー項目(コピー、貼り付け)が表示されます。

■TextBoxコントロール内で、マウスの右ボタンが押されたときの処理

e.Handled = Trueと記述することで、Silverlight標準の「Silverlight(S)」のメニューが出なくなります。

マウスの右ボタンでクリックされたXとYの位置を、変数myXとmyYに格納しておきます。 SetValueメソッドで、ContextMenuコントロールの表示位置を設定し、ContextMenuコントロールのIsOpenメソッドにTrueを指定してContextMenuを表示します。アイコン付きのメニュー項目(コピー、貼り付け)が表示されます。[保存]ボタンの使用を可能にします。

■[保存]ボタンをクリックしたときの処理

新しいSaveFileDialogのインスタンス、mySaveFileDialogオブジェクトを生成します。 フィルタにCSVファイルを指定し、DefaultExtプロパティに既定のファイル名拡張子csvを指定します。

mySaveFileDialogオブジェクトのShowDialogメソッドがTrueの場合は、mySaveFileDialogの、OpenFileメソッドで開かれたファイルと文字コードで初期化された、新しいStreamWriterのインスタンスwriterオブジェクトを生成します。Writeメソッドでヘッダを追加してTextBox1コントロールの内容をストリームに書き込みます。StreamWriterを閉じ、保存した旨のダイアログボックスを表示します。

全10回の連載はこれで終わりです。いかがでしたか?

関心を持ったサンプルを、ぜひ実際に開発して、Silverlight 4の可能性を考えてみていただければと思います。また、前回、今回のサンプルとも、データにXMLを使用しましたが、WCF RIA Servicesを使えば、SQL Serverデータベースの利用も可能です。機会があれば、またご紹介したいと思います。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る