Windows Phone アプリ用の SharePoint のフィールドの種類をサポートおよび変換する
データ変換ロジックを実装して、Windows Phone アプリで SharePoint のフィールドの種類をサポートします。
Windows Phone SharePoint リスト アプリケーション テンプレートを基にしたプロジェクトでは、既定の変換ロジックによって行われる処理や調整により、多くの SharePoint のフィールド型のデータが Windows Phone の Silverlight ユーザー インターフェイスでの表示や操作に適したものになりますが、開発者はカスタムのデータ処理ルーチンを実装することもできます。
重要
Windows Phone 8 用のアプリを開発する場合は、Visual Studio 2010 Express ではなく Visual Studio Express 2012 を使用する必要があります。 開発環境を除き、この記事のすべての情報は、Windows Phone 8 用アプリと Windows Phone 7 用アプリを作成する場合に適用されます。 > 詳細については、「 方法: SharePoint 用モバイル アプリを開発するための環境を設定する」を参照してください。
Windows Phone アプリでの SharePoint フィールド型
SharePoint リストはデータのフィールド (列に配置) で構成され、特定の種類のデータ (つまり、特定の方法で構造化されたデータ) を含むように指定されます。 これらの型はフィールド型と呼ばれます。 (このような型は列型とも呼ばれます。これは、SharePoint リストに列を追加すると、特定の種類のデータに関連付けられているフィールドの列を追加するためです)。これらのフィールドは XML スキーマによって定義されます。 DateTime データ型 (Microsoft SharePoint Server のユーザー インターフェイスの日付と時刻フィールドとして表される) を持つ "Order Date" というフィールドのスキーマは、次のようになります。
<Field Type="DateTime" DisplayName="Order Date" Required="FALSE"
EnforceUniqueValues="FALSE" Indexed="FALSE" Format="DateOnly"
FriendlyDisplayFormat="Disabled" Name="Order_x0020_Date">
<Default>[today]</Default>
<DefaultFormulaValue>2012-01-10T00:00:00Z</DefaultFormulaValue>
</Field>
"DateTime" 型で指定されている、このスキーマの Field 要素の Type 属性の値に注意してください。 他の方法で構造化されたデータを格納するように作成されたリストのフィールドでは、"Choice"、"Text"、"Boolean" のような Type の値を指定することがあります。
SharePoint フィールドの種類を、Windows Phone アプリの Silverlight コントロールに直接バインドすることはできません。 SharePoint リストにあるデータは、アプリ内のコントロールにバインドするために、特定の方法 (または Silverlight データ バインディングの標準用語で変換) で準備または処理する必要があり、この準備と調整は、Windows Phone SharePoint リスト アプリケーション テンプレートから作成されたプロジェクトの ViewModels によって処理されます。 このテンプレートに基づくプロジェクトは、多数の標準的な SharePoint フィールド型 (またはこれらの標準型のいずれかに基づいて作成されたユーザー設定フィールド) に対して、Windows Phone アプリ内の SharePoint データのバインドと表示をサポートする既定の変換ロジックを含むように設計されています。 既定の変換ロジックでサポートされるフィールドの種類を表 1 に示します。
表 1. 既定の変換ロジックを備えたフィールド型
SharePoint フィールド型 | Silverlight データ型 |
---|---|
添付ファイル | File |
ブール値 | ブール値 |
Calculated (表示のみ) | String |
選択肢 | String |
通貨 | Numeric |
DateTime | Date (電話のロケールに従って表示) |
URL | リンク |
Integer | Numeric |
Location | GeoCoordinate |
参照 | String |
MultiChoice | String |
注 | String |
Number | Numeric |
OutcomeChoice | String |
画像 | リンク |
テキスト | String |
User | String |
Guid フィールドなどの他の SharePoint フィールド型は、Windows Phone アプリで使用できますが、開発者は、既定の変換ロジックが提供されていないフィールド型の値のバインドと表示をサポートするカスタム変換ロジックを提供する必要があります。 (この記事の 「サポートされていないフィールド型をプロビジョニングするためのカスタム変換ロジック 」を参照してください)。
テンプレートがどのように特定のフィールド型の既定の変換とサポートを提供するかを説明するため、 Choice 型で指定された "Product Category" という名前のフィールドの列と、"Recreation" や "Culinary" のようないくつかのオプションが関連付けられた SharePoint のリストを想定します。 サーバー上のそのようなフィールドのスキーマは、次のようなマークアップのようになります。
<Field Type="Choice" DisplayName="Product Category" Required="FALSE"
EnforceUniqueValues="FALSE" Indexed="FALSE" Format="Dropdown"
FillInChoice="TRUE"
Name="Product_x0020_Category">
<Default>Recreation</Default>
<CHOICES>
<CHOICE>Culinary</CHOICE>
<CHOICE>Recreation</CHOICE>
<CHOICE>Sartorial</CHOICE>
<CHOICE>Travel</CHOICE>
<CHOICE>Other</CHOICE>
</CHOICES>
</Field>
この選択フィールドは、Windows Phone インターフェイスでの表示に適するように処理する必要があります。 この場合、フィールド内のデータは、文字列値のコレクション (具体的には ListItem オブジェクトの FieldValuesAsText プロパティの値の 1 つとして) 内の文字列 ("レクリエーション" など) として表されます。 Choice フィールドの変換ロジックでは、この文字列が抽出され、電話のユーザー インターフェイスに表示されます。 文字列は にバインドされ、フォームの TextBlock コントロールに表示される場合があります。 値が編集用に表示される場合、 Choice フィールドの既定の変換ロジックは、フィールドを定義する XML スキーマからフィールド ("料理"、"レクリエーション"、"Sartorial"など) の使用可能なオプションを抽出し、それらの使用可能なオプションをコレクション (具体的には、特定のオプションを含むオブジェクトの ObservableCollection(T) クラスに基づくコレクションの一種として表します (たとえば、 "料理") とそのオプションが選択されているかどうか。 これらの操作はすべて、アプリの ViewModel レイヤーで処理されます。 ビュー (またはプレゼンテーション) レイヤー (つまり、Windows Phone SharePoint リスト アプリケーション テンプレートによって編集フォーム用に生成された XAML ファイル) では、これらのオプションは既定で ListBox コントロール内の Silverlight RadioButton コントロールとしてレンダリングされます。
SharePoint のフィールド型のカスタム変換
Windows Phone SharePoint リスト アプリケーション テンプレートを基にした Visual Studio プロジェクトでは、SharePoint と Windows Phone Silverlight ユーザー インターフェイス間のデータの連携と変換を処理するしくみは、柔軟で拡張可能なように設計されています。
どのような設計でアプリケーションを作成するかによって異なりますが、変換ロジックを用意し、既定の変換ロジックでは提供されない SharePoint のフィールド型のバインドと表示をサポートしてください。またはサポートされたフィールドのデータを、既定の実装とは異なる方法で表示してください。
Windows Phone SharePoint リスト アプリケーション テンプレートに基づくプロジェクトでは、特定のデータ型に固有のデータ変換操作を処理するためのメソッドを登録するためのルーチンを含む静的な Converter クラスを実装します。 プロジェクトには、既定で特定のデータ型のデータ変換ルーチンが含まれており、登録されます。 登録メカニズムでは、デリゲートを使用して拡張を許可します。 そのため、開発者は独自の関数を記述してデータ変換のロジックを提供できます。これらのカスタム関数は、既定の関数ではなくデリゲートが呼び出されたときに呼び出すことができます。 データ変換操作に対して呼び出されるカスタム関数を配置するには、 クラスの登録メソッドを使用して 、Converter クラスに関数を登録します。 登録メソッドは、各 ViewModel に固有です。たとえば、データが編集用または表示専用 (編集なし) の場合など、データを異なる方法で処理するために、さまざまな関数を実装して登録する必要がある可能性に対応します。
ヒント
表示フォームに表示される通貨記号は、たとえ Windows Phone のロケールが異なっていても、SharePoint のロケールから提供されます。 開発者は、Converter オブジェクトを使用してこの動作をカスタマイズできます。
Display フォーム (DisplayForm.xaml) にデータ変換関数を登録するには、 Converter クラスの RegisterDisplayFieldValueConverter メソッドを使用します。 Edit フォーム (EditForm.xaml) にデータ変換関数を登録するには RegisterEditFieldValueConverter メソッドを使用し、New フォーム (NewForm.xaml) にデータ変換関数を登録するには RegisterNewFieldValueConverter メソッドを使用します。
ユーザー インターフェイスに表示されたリストのままデータを処理する変換関数を登録し (つまり、データの get 方法を決定する関数)、サーバー上のリストに保存されたユーザー インターフェイスのままデータを処理する関数 (データを set 方法を決定する関数) を登録することができます。
get 関数は、 Converter クラスの次のデリゲート宣言のシグネチャと一致させる必要があります。
public delegate object GetConvertedFieldValue(string fieldName,
ListItem item, ConversionContext context);
set 関数は、次のデリゲート宣言のシグネチャに一致させる必要があります。
public delegate void SetConvertedFieldValue(string fieldName,
object fieldValue, ListItem item, ConversionContext context);
RegisterDisplayFieldValueConverter メソッドは get 関数のみを受け入れます。これは、DisplayItemViewModel クラスが設計どおりに、データを表示することを目的としたものの、データの編集を目的としていないためです。 RegisterEditFieldValueConverter メソッドと RegisterNewFieldValueConverter メソッドは、get 関数、set 関数、またはその両方を受け入れるためにオーバーロードされます。
「方法: SharePoint 用のWindows Phone アプリでビジネス ロジックとデータ検証を実装する」で、Windows Phone アプリのユーザーが提供する形式または電話番号を検証するための検証ルーチンが開発されました。 カスタムのデータ変換を説明するため、次のサンプル コードで、 get 関数と set 関数を実装して電話番号データを特定の方法で処理し、それらの関数を Edit フォームと New フォームで使用できるように Converter クラスを使用して登録します。
次のコード例では、サーバー上のカスタム リスト テンプレートを使用して作成された製品注文リストに基づいて、Windows Phone SharePoint リスト アプリを作成したとします。 リストに "連絡先番号" という名前のフィールドがあり、このフィールドがリストの [テキスト ] フィールドとして指定されているとします。 SharePoint Server の テキスト 型として指定されたリスト フィールドの既定の構成では、ユーザーは任意のテキスト文字 (最大 255 文字) を入力できます。 このテンプレートは、SharePoint の テキスト フィールドのデータを表示および編集するための既定の変換ロジックを提供しますが、 テキスト フィールド (既定) は、電話番号に従来適用される場合など、特定の書式を適用または表示するように構成されていません。 Windows Phone アプリでは、基になるフィールドの種類 (テキスト) が特定の書式設定規則に関連付けられていない場合でも、電話番号を一貫した方法でユーザーに表示し、サーバー上のリストに保存すると、特定の方法で書式設定することができます。 特定の書式設定ルールを適用するには、サポートされているフィールド型の既定のロジックの代わりに、独自のカスタム データ変換ロジックを実装できます。
カスタムのデータ変換を実装するには
"連絡先番号" という名前のテキスト フィールドを含むリストを SharePoint Server に作成したと仮定して (「方法: SharePoint 用のWindows Phone アプリでビジネス ロジックとデータ検証を実装する」で使用する製品注文のサンプル リストなど)、Windows Phoneを使用してWindows Phone アプリを作成します。 「方法: Windows Phone SharePoint リスト アプリを作成する」の手順に従って、Visual Studio の SharePoint リスト アプリケーション テンプレートを作成します。
ソリューション エクスプローラーで、プロジェクトを表すノード (たとえば ContosoSPListApp) を選択します。
Visual Studio (または Visual Studio Express for Windows Phone) の [ プロジェクト] メニューで、[ クラスの追加] を選択します。 [ 新しい項目の追加] ダイアログ ボックスが表示され、C# の [ クラス] テンプレートが既に選択されています。
クラス ファイルの名前を指定し (ContosoConverter.cs など)、[ 追加] を選択します。 クラス ファイルがプロジェクトに追加され、編集用に開きます。
ファイルのコンテンツを次のコードで置き換えます。
using System; using Microsoft.SharePoint.Client; // Added for ListItem. using Microsoft.SharePoint.Phone.Application; // Added for ConversionContext. using System.Text.RegularExpressions; // Specify a namespace appropriate for your particular project. namespace ContosoSPListApp { public static class ContosoConverter { static Regex StandardNumberFormat = new Regex(@"^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", RegexOptions.Compiled); public static object GetConvertedTextFieldValue(string fieldName, ListItem item, ConversionContext context) { if (item == null) return null; if (fieldName == "Contact_x0020_Number") { string contactNumber = string.Empty; try { contactNumber = item.FieldValuesAsText[fieldName]; } catch (PropertyOrFieldNotInitializedException) { object itemValue = item[fieldName]; if (itemValue != null) { contactNumber = itemValue.ToString(); } } // Regularize the formatting of phone number for display in UI. if (StandardNumberFormat.IsMatch(contactNumber)) { // Phone number is in an acceptable format, but formatting it // in a specific way for visual consistency in the UI. string properlyFormattedNumber = StandardNumberFormat.Replace(contactNumber, "($1) $2-$3"); return properlyFormattedNumber; } else { // Return a representation of the data adorned in such a way // as to designate its invalidity. if (!contactNumber.Contains("Invalid Number")) { return string.Format("Invalid Number: {0}", contactNumber); } else { // Assume data is already adorned with an invalidity designation. return contactNumber; } } } else { return item[fieldName]; } } public static void SetConvertedTextFieldValue(string fieldName, object fieldValue, ListItem item, ConversionContext context) { if (fieldValue == null) return; if (fieldName == "Contact_x0020_Number") { // Conventional formats (e.g., 555-555-5555) are acceptable, // but formatting phone numbers consistently here for storage in list on Server. string contactNumber = (string)fieldValue; if (StandardNumberFormat.IsMatch(contactNumber)) { string properlyFormattedNumber = StandardNumberFormat.Replace (contactNumber, "($1) $2-$3"); item[fieldName] = properlyFormattedNumber; } else { if (!contactNumber.Contains("Invalid Number")) { item[fieldName] = string.Format("Invalid Number: {0}", contactNumber); } else { // Assume data is already adorned with an invalidity designation. item[fieldName] = contactNumber; } } } else { // Allow values for other Text fields to be passed on to list without modification. item[fieldName] = fieldValue; } } } }
ファイルを保存します。
ここでの GetConvertedTextFieldValue 関数は、電話番号を格納するフィールド (この例では "Contact Number" という名前) から取得した文字列データが、(北米の) 電話番号の標準的な入力規則に沿った書式かどうかを決定し、規則に沿った書式であれば、表示用の書式 "(XXX) XXX-XXXX" に番号を変換します。 データが標準的な電話番号の書式ではない場合、指定子でプレフィックスが付けられます。 この関数でリスト内のデータが実際に変更されるわけではありません。 一方で SetConvertedTextFieldValue 関数は、反対の方向に処理します。 関数はフィールドに入力されたデータの値をチェックし、入力されたデータが標準的な電話番号パターンに一致するかどうかを決定します。 パターンに一致した場合、入力値は特定の書式に変換され、サーバーのリストに保存されます。 入力値が標準的な書式ではない場合、値は指定子のプレフィックスが付けられ、プレフィックスが付けられた値がサーバーに保存されます。
あとは、Edit フォームと New フォームで使用するために Converter クラスを使用してこれらのデータ変換関数を登録するだけです。 コンバーターは複数の場所に登録できます。 以下のプロシージャでは、List フォーム (List.xaml) の OnNavigatedTo イベントにコンバーターが登録されています。 List フォームが作成されると、アプリで Edit フォームと New フォームがインスタンス化される以前にナビゲートされるため、List フォームのこのイベントに登録されたコンバーターは、すべてのフォームのテキスト フィールドに影響します。
データ変換関数を登録するには
前の手順で作成したクラスの同じプロジェクトの ソリューション エクスプローラーで、[ ビュー] ノードの下にある List.xaml ファイルを選択します。
F7 を押して、関連した分離コード ファイル List.xaml.cs を編集用に開きます。
ListForm 部分クラスを実装したコード ブロックの先頭、コード ブロックの左かっこの後、
ListForm()
コンストラクターの前に、次のプライベート変数宣言を追加します。private bool _isConversionRegistered;
ListForm 部分クラスを実装するコード ブロック (左かっこと右かっこで区切られる) 内で、次の RegisterTextFieldValueConverters メソッドをファイルに追加します。
private void RegisterTextFieldValueConverters() { Converter.RegisterEditFieldValueConverter(FieldType.Text, ContosoConverter.GetConvertedTextFieldValue, ContosoConverter.SetConvertedTextFieldValue); Converter.RegisterNewFieldValueConverter(FieldType.Text, ContosoConverter.GetConvertedTextFieldValue, ContosoConverter.SetConvertedTextFieldValue); }
このメソッドは Converter クラスの適切な登録メソッドを呼び出します。 このコードでは、前の手順で作成された get 関数と set 関数を持つカスタムクラスが "ContosoConverter" という名前です。 違う名前でクラスを指定していた場合は、その名前でここを変更します。
_isConversionRegistered フラグの値のチェックと、前の手順で追加した RegisterTextFieldValueConverters 関数の呼び出しを追加して、ファイルの OnNavigatedTo イベント ハンドラーの実装を修正します。 修正されたハンドラーは以下のようになります。
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); App.MainViewModel.ViewDataLoaded += new EventHandler<ViewDataLoadedEventArgs>(OnViewDataLoaded); App.MainViewModel.InitializationCompleted += new EventHandler<InitializationCompletedEventArgs>(OnViewModelInitialization); // The OnNavigatedTo event can fire more than once, but the converters only need // to be registered once, so checking the conversion flag first. if (_isConversionRegistered == false) { // Register converters. RegisterTextFieldValueConverters(); _isConversionRegistered = true; } }
ファイルを保存します。
データ変換関数は、Edit フォームと New フォームの Text データ型に関連付けられたすべてのフィールドに登録されることに注意してください。 前の手順で作成された ContosoConverter クラスに実装された get 関数と set 関数には、特定のフィールド (ここでは "Contact_x0020_Number" という名前) だけのデータを処理する条件チェックが含まれるため、データを他の Text フィールドに "パス スルー" することができます。
サポートされないフィールド型に対処するためのカスタムの変換ロジック
アプリでテキスト フィールドの変換ロジックを指定しない場合でも、そのようなフィールドを表示および編集できます。 既定の変換ロジックが既に提供されているフィールドに対して独自の変換ロジックを提供すると、既定のロジックが設計意図に適していない場合に、それらのフィールド内のデータの形式または構造をより詳細に制御できます。 Guid フィールドなど、他の特定のデータ型を持つフィールドの場合、変換ロジックは既定では提供されませんが、フィールドに対して変換ロジックが提供されるメカニズム (前のセクションで説明) を理解している場合は、Windows Phone SharePoint List Application テンプレートで既定のロジックでサポートされていないアプリ内のフィールド型をサポートする独自の変換ロジックを提供するのが非常に簡単な場合があります。
Guid データ型のフィールドを持つ Product Identifiers という名前の SharePoint のリストを元にした Windows Phone アプリを作成しているとします。 以下のコード サンプルでは、リストに ( Text 型の) Product (または Title) フィールドと、( Guid 型の) Identifier フィールドがあるリストを想定しています。
注:
Guid フィールドのある SharePoint リストは、プログラムから作成するか、Guid フィールドを含むリスト テンプレートから作成する必要があります。
テンプレートを使用して作成され、この単純なリストに基づいて作成されたWindows Phone アプリでは、Guid フィールドのデータは既定では表示されません。 (そのデータの代わりに、次のようなメッセージが表示されます:"フィールド型 'Guid' のコンバーターが登録されていません。)次の手順では、Windows Phone アプリの Guid フィールドをサポートする変換ロジックを含めます。 GUID を表示し、追加されたリスト アイテムの新しい GUID 値を生成するフィールド値コンバーターを登録するメソッドを含むクラスを追加します。
サポートされないフィールド型の変換ロジックを提供するには
Windows Phone SharePoint リスト アプリケーションから作成され、前述の Product Identifiers リストに基づくプロジェクト (たとえば SPListAppGuidConversion) では、 ソリューション エクスプローラーのプロジェクトを表すノードを選択します。
[ プロジェクト] メニューの [ クラスの追加] を選択します。 [ 新しい項目の追加] ダイアログ ボックスが表示され、C# の [ クラス] テンプレートが既に選択されています。
ファイル名に GuidConversion.cs を指定し、[ 追加] を選択します。 クラス ファイルがソリューションに追加され、編集用に開きます。
ファイルのコンテンツを次のコードに置き換えます。
using System; using Microsoft.SharePoint.Phone.Application; using Microsoft.SharePoint.Client; namespace SPListAppGuidConversion { public class GuidConversion { /// <summary> /// Registers a GET converter to prepare GUID values for display. /// </summary> static public void RegisterDisplayFieldGuidConverter() { // Register GET converter to display GUID values. Converter.RegisterDisplayFieldValueConverter(FieldType.Guid, getConvertedFieldValue: (string fieldName, ListItem item, ConversionContext context) => { string guidValue = string.Empty; try { guidValue = item.FieldValuesAsText[fieldName]; } catch (PropertyOrFieldNotInitializedException) { object itemValue = item[fieldName]; if (itemValue != null) { guidValue = itemValue.ToString(); } } if (string.IsNullOrWhiteSpace(guidValue)) { return string.Format("{{{0}}}", Guid.Empty); } else { Guid g = new Guid(); if (Guid.TryParse(guidValue, out g)) { guidValue = string.Format("{{{0}}}", g.ToString().ToUpper()); return guidValue; } else { return "Invalid Identifier (GUID)"; } } }); } /// <summary> /// Registers GET and SET converters for GUID value of new (i.e., added) list items. /// </summary> public static void RegisterNewFieldGuidConverter() { Converter.RegisterNewFieldValueConverter(FieldType.Guid, getConvertedFieldValue: (string fieldName, ListItem item, ConversionContext context) => Guid.NewGuid().ToString(), setConvertedFieldValue: (string fieldName, object fieldValue, ListItem item, ConversionContext context) => { if (fieldValue == null) { item[fieldName] = Guid.Empty.ToString(); } else { item[fieldName] = fieldValue; } }); } } }
このカスタム クラスでは、 Converter クラスの RegisterDisplayFieldValueConverter と RegisterNewFieldValueConverter メソッドを匿名関数 (ラムダ ステートメントで定義) を使用して呼び出し、登録メソッドに必要なデリゲート用の get ルーチンと set ルーチンを実装します。 ここでのオプションの引数ラベル (たとえば "getConvertedFieldValue:") は、どのデリゲートが定義されているかを明確にするためだけに使用されています。
ファイルを保存します。
ソリューション エクスプローラーで、App.xaml ファイルを選択します。
ソリューション エクスプローラーで、App.xaml ファイルを選択します。
F7 を押して、関連した分離コード ファイル App.xaml.cs を編集用に開きます。
Application_Launching イベント ハンドラー (Windows Phone SharePoint リスト アプリケーション テンプレートから作成された新規プロジェクトでは、空) の実装を探し、以下のコードに置き換えます。
private void Application_Launching(object sender, LaunchingEventArgs e) { // Register converters for GUID fields. Converters can be // registered just once for the app. GuidConversion.RegisterDisplayFieldGuidConverter(); GuidConversion.RegisterNewFieldGuidConverter(); }
新規のリスト項目に対して動作する (つまり、リストに項目が追加されたときに GUID 値を生成する) コンバーター ロジックについては、 NewItemViewModel の Identifier フィールドが New フォームにバインドされていることを確認する必要があります。 これを実現する 1 つの方法として、Identifier フィールドにセットされた Text プロパティの Binding 宣言で、隠し TextBlock コントロールを NewForm.xaml に追加します。 次の NewForm.xaml ファイルのマークアップのセクションのように、 StackPanel コンテナー コントロールに Title フィールド用の TextBox コントロールを含む TextBlock コントロールを追加できます。
<Grid x:Name="LayoutRoot" Background="Transparent" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:Microsoft.Phone.Controls; assembly=Microsoft.Phone.Controls"> <StackPanel> <ProgressBar Background="Red" x:Name="progressBar" Opacity="1" HorizontalAlignment="Center" VerticalAlignment="Top" Height="15" Width="470" IsIndeterminate="{Binding IsBusy}" Visibility="{Binding ShowIfBusy}" /> <ScrollViewer HorizontalScrollBarVisibility="Auto" Height="700"> <Grid x:Name="ContentPanel" Width="470"> <StackPanel Margin="0,5,0,5"> <StackPanel Orientation="Vertical" Margin="0,5,0,5"> <TextBlock TextWrapping="Wrap" HorizontalAlignment="Left" Style="{StaticResource PhoneTextNormalStyle}"> Title*</TextBlock> <TextBox Style="{StaticResource TextValidationTemplate}" FontSize="{StaticResource PhoneFontSizeNormal}" Width="470" HorizontalAlignment="Left" Name="txtTitle" Text="{Binding [Title], Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" TextWrapping="Wrap" /> <TextBlock Name="txtIdentifier" Text="{Binding [Identifier]}" Visibility="Collapsed"/> </StackPanel> </StackPanel> </Grid> </ScrollViewer> </StackPanel> </Grid>
ファイルを保存します。
If you start the project and deploy the app to the Windows Phone Emulator to run it, data in the Identifier field is displayed in the List form (List.xaml) if the corresponding field in the SharePoint list contains a GUID value. (See Figure 1.)
図 1. Displaying Guid fields
In projects based on the Windows Phone SharePoint List Application template, Silverlight controls may not be added to forms and bound to field types that are not supported with default conversion logic in the template. For the Identifiers field of the Product Identifiers list used in the preceding procedure, you could add markup to the DisplayForm.xaml file to define additional controls to display GUID values, such as a TextBlock control and a TextBox control in a StackPanel control, which is itself contained within the Grid control of the user interface. The markup for the added StackPanel control could resemble the following.
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal"
Margin="0,5,0,5">
<TextBlock TextWrapping="Wrap" Width="150" HorizontalAlignment="Left"
Style="{StaticResource PhoneTextNormalStyle}">Identifier:</TextBlock>
<TextBlock Width="310" HorizontalAlignment="Left" Name="txtIdentifier"
Text="{Binding [Identifier]}" TextWrapping="Wrap" Style="
{StaticResource PhoneTextSubtleStyle}" />
</StackPanel>
Identifier フィールドが、List フォーム上と同じように Display フォーム上に表示されます。