Поделиться через


Поддержка и преобразование типов полей SharePoint для приложений Windows Phone

Реализация логики преобразования данных для поддержки типов полей SharePoint в приложениях Windows Phone.

В проектах, созданных на основе шаблона приложения списка SharePoint для Windows Phone данные множество типов поля SharePoint обрабатываются и координированное логикой преобразования по умолчанию для подходит для отображения и управление ими в пользовательском интерфейсе Silverlight Windows Phone, но разработчики также могут реализовать собственные пользовательские данные процедур обработки.

Важно!

При разработке приложения для Windows Phone 8 необходимо использовать Visual Studio Express 2012 вместо Visual Studio 2010 Express. За исключением среды разработки, все сведения, приведенные в этой статье, относятся к созданию приложений для Windows Phone 8 и Windows Phone 7. > Дополнительные сведения см. в разделе Практическое руководство. Настройка среды для разработки мобильных приложений для SharePoint.

Типы полей SharePoint в приложениях Windows Phone

Списки SharePoint обеспечить достаточный с поля данных (в виде столбцов), и данное поле предназначена для хранения данных определенного типа (то есть, данные структурированы определенным образом). Эти типы вызываются типов полей. (Такие типы называется также типы столбцов, так как при добавлении столбца к списку SharePoint добавляется столбец полей, связанного с типом данных.) Эти поля определены схемы XML. Схема для поля, называется «Дата заказа» с типом данных DateTime (представленные в виде поля даты и времени в пользовательском интерфейсе Microsoft SharePoint Server ) может выглядеть следующим образом.

<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>

Обратите внимание, в частности значение атрибута Type элемента Field в этой схеме, указанный здесь в качестве даты-времени". Список полей, созданной для хранения данных структурирован другими способами может определенных Type значение, например, "Вариант" или "Text" или "Boolean".

Типов поля SharePoint не может быть связан непосредственно к элементам управления Silverlight в приложении Windows Phone. Данные как в списке SharePoint необходимо быть подготовлен или обработки определенным образом (или в Стандартные термины привязки данных Silverlight, преобразованы) для привязанных к элементам управления в приложении и этой подготовки и координация обрабатывается ViewModels в проектах, созданных на основе шаблона приложения списка SharePoint для Windows Phone. Проекты на основе этого шаблона предназначены для включения логику преобразования по умолчанию для поддержки привязки и отображение данных SharePoint в приложении Windows Phone для некоторых стандартных типов поля SharePoint (или для настраиваемых полей, основанного на один из следующих стандартных типов). В таблице 1 перечислены типы полей, поддерживающих логику преобразования по умолчанию.

Таблица 1. Типы полей с подготовкой к преобразованию по умолчанию

Тип поля SharePoint Тип данных Silverlight
Вложения Файл
Логический Логический
Вычисляется (только для отображения) String
Варианты Строка
Денежный Numeric
DateTime Дата (представлено в соответствии с языковой стандарт по телефону)
URL-адрес Ссылка
Целое число Numeric
Расположение GeoCoordinate
Подстановка Строка
MultiChoice Строка
Примечание Строка
Число Numeric
OutcomeChoice Строка
Рисунок Ссылка
Text Строка
User Строка

Других типов поля SharePoint, такие как поля Guid, можно использовать в приложениях Windows Phone, но разработчикам необходимо предоставить логику пользовательского преобразования для поддержки привязки и отображение значений для этих типов полей, для которых по умолчанию предоставляется логика преобразования. (См Логика пользовательского преобразования для подготовки типы полей не поддерживается в этой статье).

В качестве иллюстрации, как шаблон предоставляет преобразование по умолчанию и поддержка для определенных типов полей, предположим, SharePoint, список содержит столбец полей с именем "Категория продуктов" назначением с типом Choice и связанные с несколько параметров, таких как "Создать заново" и "Culinary". Схема для поля на сервере может напоминать следующую разметку.

<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>

В этом поле Choice имеет обработки для подходит для отображения в интерфейсе Windows Phone. В этом случае данные в поле представлены в виде строки (например, "создать заново") в коллекции строковых значений (в частности, по одному из значений свойства FieldValuesAsText объекта ListItem ). Логика преобразования для полей Choice извлекает такую строку для отображения в интерфейсе пользователя телефона. Строка может привязанных к и отображаемых в элементе управления TextBlock в форме. Если значение предоставляется для редактирования, логику преобразования по умолчанию для поля Choice извлекает доступные параметры для поля ("Кулинарных", "Создать заново", "Sartorial", и т.д.) из XML-схему, которая определяет поле и представляет эти доступные параметры семейства сайтов (в частности, как тип семейства сайтов на основе класса ObservableCollection(T) ) определенный параметр сами включают (например объектов "Кулинарных") и ли был выбран соответствующий параметр. Эти операции обрабатываются в ViewModel уровня приложения. На уровне представления (или презентации) (который в XAML-файле создается для формы изменения шаблона приложения списка SharePoint для Windows Phone) эти параметры отображаются по умолчанию как Silverlight RadioButton управления в элементе управления ListBox.

Настраиваемое преобразование для типов поля SharePoint

В Visual Studio проектах, созданных на основе шаблона приложения списка SharePoint для Windows Phone механизм обработки координации и преобразования данных между SharePoint и пользовательский интерфейс Windows Phone Silverlight разработан для гибкости и расширяемости.

В зависимости от целями разработки для конкретного приложения необходимо предоставить логику преобразования для поддержки привязки и отображение типов поля SharePoint, которые не предоставляются вместе с логику преобразования по умолчанию или воспользуйтесь для отображения данных для поля, поддерживаемые в результате которого отличается от реализации по умолчанию.

Проекты на основе шаблона приложения списка SharePoint для Windows Phone реализации класса статического Converter, который включает в себя процедуры для регистрации методов для обработки типов данных специально для данного операций преобразования данных. Проект включает в себя и регистрирует процедуры преобразования данных для определенных типов данных по умолчанию. Механизм регистрации использует делегатов для обеспечения расширяемости. Разработчиков (en) таким образом можно написать собственные функции, чтобы предоставить логику для преобразования данных, и эти пользовательские функции могут вызываться при вызове делегаты вместо функции по умолчанию. Чтобы упорядочить для пользовательских функций для вызова для операций преобразования данных, зарегистрируйте свои функции с классом Converter, с помощью методов регистрации класса. Регистрация методы выглядят специально для каждого ViewModel, чтобы учесть возможность того, что требуется реализовать и зарегистрировать различные функции для обработки данных по-разному в зависимости от того, например, будет ли данные будут представлены для редактирования или для просмотра только (без изменения).

Совет

[!Совет] Символ валюты, приведенные в форме отображения — от языкового стандарта SharePoint даже в том случае, если языковой стандарт Windows Phone нет в списке. Разработчики могут настраивать это поведение с помощью объектов Converter.

Чтобы зарегистрировать функции преобразования данных для отображения форм (DisplayForm.xaml), используйте метод RegisterDisplayFieldValueConverter класса Converter. Чтобы зарегистрировать функции для формы изменения (EditForm.xaml), используйте метод RegisterEditFieldValueConverter и новой формы (NewForm.xaml), используйте метод RegisterNewFieldValueConverter.

Можно регистрировать функции преобразования, которые обрабатывают данные, поступающие из списка отображаться в пользовательском интерфейсе (то есть функции, определяющие способ получить данные) и функции, которые обрабатывают данные из пользовательского интерфейса, как его сохраненные в список на сервере можно регистрировать (функции, определяющие как набор данных).

Получите функции должно соответствовать подписи следующее объявление делегата в классе Converter.

public delegate object GetConvertedFieldValue(string fieldName,
  ListItem item, ConversionContext context);

Настройка функции должно соответствовать подписи следующее объявление делегата.

public delegate void SetConvertedFieldValue(string fieldName,
  object fieldValue, ListItem item, ConversionContext context);

Метод RegisterDisplayFieldValueConverter принимает только, функция get, так как класс DisplayItemViewModel, замыслу, предназначенного для отображения, но не изменять данные. RegisterEditFieldValueConverter, а также методы RegisterNewFieldValueConverter перегрузки для принятия функции получить и задать функции.

В статье Практическое руководство. Реализация бизнес-логики и проверки данных в приложении Windows Phone для SharePoint была разработана подпрограмма проверки для проверки формата или номеров телефонов, предоставленных пользователем приложения Windows Phone. Чтобы продемонстрировать преобразование пользовательских данных, в следующем примере кода реализуется функции получения и задания для обработки данных номеров телефонов определенным образом и зарегистрировать эти функции для использования в новой формы с классом Converter и изменить.

Предположим, для целей в следующем примере кода, было ли создано приложение Windows Phone SharePoint списка, на основе списка заказов на продукт создан на основе шаблона настраиваемого списка на сервере. Предполагается, что список содержит поле с именем «Номер контакта» и, что это поле используется в качестве поля Text в списке. В конфигурации по умолчанию в качестве типа Text на SharePoint Server поле списка пользователь может ввести любые текстовых символов (не более 255 знаков). Шаблон предоставляет логику преобразования по умолчанию для отображения и редактирования данных из Text полей в SharePoint, но поле Text (по умолчанию) имеет структуру для применяться или отображение определенных форматирования, например, может быть традиционно применена к телефонных номеров. В приложении Windows Phone можно номера телефонов для отображения для пользователей в едином виде и, при сохранении в список на сервере, отформатированные определенным образом, даже если базовый тип поля ( Text) не связан с определенным правила форматирования. Для применения определенного правила форматирования, можно реализовать собственную логику преобразования пользовательских данных вместо логики по умолчанию для типа поддерживаемые поля.

Чтобы реализовать преобразование пользовательских данных

  1. Если вы создали список на сервере SharePoint Server, содержащий текстовое поле "Контактный номер" (например, пример списка заказов на продукты, используемый в разделе Практическое руководство. Реализация бизнес-логики и проверки данных в приложении Windows Phone для SharePoint), создайте приложение Windows Phone с помощью Windows Phone Шаблон приложения списка SharePoint в Visual Studio, выполнив действия, описанные в разделе Практическое руководство. Создание приложения списка SharePoint Windows Phone.

  2. В Обозревателе решений выберите узел, представляющий проект (с именем, например,ContosoSPListApp).

  3. В меню проект в Visual Studio (или Visual Studio Express для Windows Phone) выберите пункт Добавить класс. Откроется диалоговое окно Добавление нового элемента с помощью C# класс шаблона уже.

  4. Укажите имя для файла класса (например, ContosoConverter.cs) и нажмите кнопку Добавить. Файл класса будет добавлен в проект и открыт для редактирования.

  5. Замените содержимое файла следующим кодом.

    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;
                }
            }
        }
    }
    
  6. Сохраните файл.

Функцию GetConvertedTextFieldValue определяет, будет ли строка данные из поля предназначен для хранения номера телефона (с именем "Номер контакта" в данном примере) отформатированное в соответствии с стандартным соглашениям для телефонных номеров (в Северной Америке) и, если да, преобразует это число в определенный формат для отображения "(XXX) XXX-XXXX". Если данные не отформатировано как номер телефона standard, оно указывается обозначение. Эта функция не фактически изменение данных в списке. Функция SetConvertedTextFieldValue, с другой стороны, переходит в обратном направлении. Проверяет значение данных, предоставленных пользователю определить, соответствует ли введенные данные шаблон для стандартных телефонных номеров для поля. Если это так, предоставленное значение преобразуется в определенный формат будет сохранен в список на сервере. Если указанное значение не стандартного формата, обозначение указывается значение и затем — с префиксом значение сохранены на сервере.

Теперь остается зарегистрировать эти функции преобразования данных с помощью класса конвертера для использования в формах редактирования и создания. Конвертеры можно зарегистрировать в нескольких местах. В следующей процедуре конвертеры, регистрируются в событии OnNavigatedTo формы списка (List.xaml). Форма списка создается и переход, прежде чем редактирования и создания форм создаются в приложении, поэтому конвертеры, зарегистрированные в это событие в виде списка вступят в силу для текстовых полей в формах.

Для регистрации функции преобразования данных

  1. В Окне Обозреватель решений для одного проекта, в котором вы создали класс в предыдущей процедуре выберите файл List.xaml в разделе узел представления.

  2. КлавишиF7Чтобы открыть файл выделенным кодом List.xaml.cs, для редактирования.

  3. Добавьте следующее объявление переменной закрытого в верхнюю часть блока кода, который реализует разделяемый класс ListForm после открывающей скобки в блоке кода и перед конструктором ListForm() .

    private bool _isConversionRegistered;
    
  4. Добавьте следующий метод RegisterTextFieldValueConvertersв файл в блоке кода (обозначенного открывающих и закрывающих скобок), который реализует разделяемый класс ListForm.

    private void RegisterTextFieldValueConverters()
    {
        Converter.RegisterEditFieldValueConverter(FieldType.Text,
                          ContosoConverter.GetConvertedTextFieldValue,
                            ContosoConverter.SetConvertedTextFieldValue);
    
        Converter.RegisterNewFieldValueConverter(FieldType.Text,
                              ContosoConverter.GetConvertedTextFieldValue,
                              ContosoConverter.SetConvertedTextFieldValue);
    }
    

    Этот метод просто вызывает соответствующий регистрации методов класса Converter. Для этого кода предполагается, что настраиваемый класс, содержащий функции получения и задания, созданные в предыдущей процедуре называется "ContosoConverter". Если указано другое имя класса, соответствующим образом измените код здесь.

  5. Измените реализации обработчика событий OnNavigatedTo в файле, добавив проверять на значение флага _isConversionRegistered и вызове функции RegisterTextFieldValueConverters, добавленные в предыдущем шаге. Измененные обработчик должен иметь следующий вид.

    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;
        }
    }
    
  6. Сохраните файл.

Обратите внимание на то, что функции преобразования данных регистрируются все поля, связанного с типом данных Text в формах редактирования и создания. Именно по этой причине, включение функции получения и задания реализации для ContosoConverter класс, созданный в предыдущей процедуре проверки условий для обработки данных для отдельного поля (с именем, в этом случае "Contact_x0020_Number"), позволяя данных "проходить через" для других полей Text.

Логика пользовательского преобразования для подготовки типы полей не поддерживается

Даже в том случае, если не предоставляет логику преобразования в вашем приложении для поля Text, такие поля можно по-прежнему отображения и редактирования. Предоставление собственную логику преобразования для полей, которые предоставляются вместе с логику преобразования по умолчанию уже дает большую степень контроль над форматом или структуры данных в этих полях Если логики по умолчанию не подходит для вашей целями разработки. Для полей и некоторые другие типы данных, как поля Guid логику преобразования не предоставляется по умолчанию, но если вы понимаете механизм (описано в предыдущем разделе), с помощью которого предоставляется логика преобразования для полей, это может быть довольно легко собственную логику преобразования для поддержки типов полей в свое приложение, которое не поддерживают логику по умолчанию для шаблона приложения списка SharePoint для Windows Phone.

Предположим, что вы создаете приложения Windows Phone, на основе списка SharePoint с именем идентификаторы продукта, которая содержит поле с типом данных Guid. В этом в следующем примере кода предполагается, что список имеет продукта (или заголовок) поле (типа Text) и поле идентификатора (из типа Guid).

Примечание.

[!Примечание] Списки SharePoint с полями Guid должен быть создан программным образом или из шаблона списка, включающего Guid полей.

В приложении Windows Phone создан на основе шаблона и на основе этого простого списка данные в поля Guid не отображается по умолчанию. (Вместо эти данные отображаются сообщения следующим образом: "Не конвертера для типа поля"Guid"не зарегистрирован.") В следующей процедуре будет включать логику преобразования для поддержки Guid поля для приложения Windows Phone. Добавьте класс, который содержит методы для регистрации конвертеров значение поля для отображения идентификаторов GUID и для создания новых значений GUID для добавлен список элементов.

Чтобы предоставить логику преобразования для типа поля не поддерживается

  1. В проект (с именем, например, SPListAppGuidConversion) из приложения списка SharePoint для Windows Phone и на основе списка идентификаторов продукта, упомянутого выше выберите узел, представляющий проект в Обозревателе решений.

  2. В меню Проект выберите Добавить класс. Отобразится диалоговое окно Добавление нового элемента с выбранным шаблоном Класс C#.

  3. Укажите GuidConversion.cs в качестве имени файла и нажмите кнопку Добавить. Добавлен в решение и открывается для редактирования файла класса

  4. Замените содержимое файла следующим кодом.

    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;
                        }
                    });
            }
        }
    }
    

    В этом пользовательский класс RegisterDisplayFieldValueConverter и RegisterNewFieldValueConverter методов класса Converter называются использование анонимных функций (определяется с помощью лямбда оператора) для реализации процедуры получения и задания для делегатов, необходимые для регистрации методов. Необязательный аргумент здесь метками (например, "getConvertedFieldValue:") включены в этот код только для уточнения, определенные какие делегаты.)

    Этот подход, включающий лямбда-выражения, является альтернативой передаче именованных функций в качестве параметров функции регистрации преобразователя, что было продемонстрировано в процедуре, описанной выше в этом разделе (в разделе Регистрация функций преобразования данных).

  5. Сохраните файл.

  6. В Обозревателе решений выберите файл App.xaml.

  7. КлавишиF7Чтобы открыть выделенным кодом файл App.xaml.cs, для редактирования.

  8. Найдите реализации обработчика событий Application_Launching (который пуст в новый проект, созданный на основе шаблона приложения списка SharePoint для Windows Phone) и замените его следующим кодом.

    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();
    }
    
  9. Для логики конвертера для работы для новых элементов списка (то есть, чтобы создать GUID значения при добавлении элементов в список), необходимо убедиться, что поле идентификатора NewItemViewModel привязан к новой формы. Для этого можно путем добавления элемента управления скрытые TextBlock NewForm.xaml с объявлением Binding, для его свойства Text идентификатор поля. Элемент управления TextBlock можно добавить в контейнер StackPanel элемент управления, который включает в себя элемент управления TextBox для поля Название, как показано в следующем разделе разметку в файле NewForm.xaml.

    <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>
    

    Сохраните файл.

Если запустить проект и развертывание приложения в эмуляторе Windows Phone для ее выполнения данных в поле Идентификатор отображается в виде списка (List.xaml), если в соответствующее поле в список SharePoint содержит значение GUID. (См.)

Рис. 1. Отображение полей GUID

Отображение полей GUID

В проектах, созданных на основе шаблона приложения списка SharePoint для Windows Phone элементов управления Silverlight может не добавлены в формы и привязанных к типы полей, которые не поддерживают логику преобразования по умолчанию в шаблоне. Для поля идентификаторы список идентификаторов продукта, используемый в предыдущей процедуре можно добавить разметку в файл DisplayForm.xaml, чтобы определить дополнительные элементы управления для отображения значений GUID, например управления TextBlock и TextBox в элементе управления StackPanel, который является самой Grid элемента управления пользовательского интерфейса. Разметка для элемента управления добавлены StackPanel может выглядеть следующим образом.

<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>

Теперь в поле Идентификатор отображается в форме отображения, так и в виде списка.

См. также