Nano Hash - криптовалюты, майнинг, программирование

WCF RIA Services - загрузка данных и привязка

Этим вечером я просто играл с новой бета-версией WCF RIA Services для Silverlight. Пока это выглядит хорошо, но я столкнулся с несколькими препятствиями при попытке получить данные и предоставить их пользовательскому интерфейсу через привязку.

Прежде всего, как я могу получить одно целое или строковое значение из моей службы? Скажите, есть ли у меня этот метод в моем доменном сервисе:

public int CountEmployees () {вернуть this.ObjectContext.Employees.Count (); }

Как я могу позвонить в это и привязать результат, скажем, к TextBlock?

Кроме того, есть ли способ создать собственный макет для привязки данных? Я чувствую себя немного «ограниченным» списком ListBox, DataGrid и т. Д. Как можно, например, создать сетку со стековой панелью внутри и иметь некоторые текстовые блоки, показывающие связанные данные? Если это вообще возможно с WCF RIA Services :)

Заранее большое спасибо.

08.12.2009

Ответы:


1

Вы можете назвать свой класс схемой classname.shared.cs, и этот код также будет доступен в приложении Silverlight.

Используя механизм привязки данных Silverlight / WPF, вы можете создать любой модный макет, используя контейнеры datagrid / listbox и обычные элементы управления, такие как текстовое поле / метку, и применить свой собственный стиль / скин - Пример.

ИЗМЕНИТЬ

Общий код не может содержать никаких функций, связанных с базой данных, только некоторые простые вычисления. Если вы хотите получить это значение с сервера, вам необходимо вызвать метод WCF.

На стороне сервера вы создаете реализацию DomainService:

   [EnableClientAccess()]
    public class HelloWorld : DomainService
    {
        public string SayHello()
        {
            return "Test";
        }
    }

Затем вы можете использовать это на клиенте:

    HelloWorld context = new HelloWorld();
    context.SayHello(x => context_SayHelloCompleted(x), null);

void context_SayHelloCompleted(System.Windows.Ria.InvokeOperation<string> op)
{
    HelloTextBlock.Text = op.Value;
}

Вся грязная работа по обеспечению доступности класса HelloWorld в клиенте Silverlight выполняется Visual Studio. Проверить скрытую папку сгенерированного кода.

Атрибут [Invoke] устарел в последней версии служб RIA.

08.12.2009
  • Фактически, файл shared.cs будет доступен как есть и будет только скопирован. то есть: вы не можете получить доступ к базе данных в методах в этом файле. Итак, если вы хотите запросить только количество сотрудников, не запрашивая все данные, вам не следует помещать его в файл shared.cs. 09.12.2009
  • Спасибо, парни! Это имеет смысл :) Значит, при вызове пользовательских методов это больше похоже на обычный вызов WCF, чем на вызов RIA, поскольку [Invoke] теперь устарел? 09.12.2009
  • Я не думаю, что атрибут Invoke устарел, потому что я использовал его в версии 4! 07.04.2011
  • Небольшой комментарий к стилю кода, context.SayHello(context_SayHelloCompleted, null); имеет больше смысла, чем context.SayHello(x => context_SayHelloCompleted(x), null);. Создание анонимного метода для ретрансляции сообщения методу с той же подписью кажется пустой тратой пространства стека: P 30.12.2011

  • 2

    Для создания собственных методов вы можете использовать атрибут Invoke. На стороне сервера вы объявляете в такой доменной службе

    [EnableClientAccess]
    public class EmployeesService : DomainService
    {
        [Invoke]
        public int CountEmployees() 
        {
            return this.ObjectContext.Employees.Count(); 
        }
    }
    

    И на своей стороне клиента вы можете использовать это так

    EmployeesContext context = new EmployeesContext();
    InvokeOperation<int> invokeOp = context.CountEmployees(OnInvokeCompleted, null);
    
    private void OnInvokeCompleted(InvokeOperation<int> invOp)
    {
      if (invOp.HasError)
      {
        MessageBox.Show(string.Format("Method Failed: {0}", invOp.Error.Message));
        invOp.MarkErrorAsHandled();
      }
      else
      {
        result = invokeOp.Value;
      }
    }
    

    По второму вопросу вы не ограничены привязкой. Объект, который вы получаете из своего контекста, можно связать с любыми элементами, которые вы хотите.

    08.12.2009
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..