Silverlight RIA: как реализовать уведомление об изменениях в моем общем коде - PullRequest
1 голос
/ 13 мая 2011

Я расширил свою службу домена, используя файл «общего кода», чтобы добавить дополнительное свойство в мой класс «Бронирование», который рассчитывает пробег по StartMilet и FinishMilib следующим образом:

 public int? JourneyMileage
        {
            get
            {
                if (StartMileage.HasValue && FinishMileage.HasValue)
                {
                    return (FinishMileage - StartMileage);
                }
                else
                {
                    return null;
                }
            }
        }

StartMilet и FinishMilib - это свойства в моем автоматически сгенерированном домене. Свойство JourneyMilet привязано к пользовательскому интерфейсу, равно как StartMicycle и FinishMicycle.

Как обновить свойство JourneyM Пробег (и, следовательно, также и пользовательский интерфейс) при изменении StartMicycle или FinishMicycle? Я искал что-то вроде NotifyPropertyChanged, но, похоже, нарисовал пробел.

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Добавьте в свой общий класс бронирования условный кодовый блок silverlight, подобный этому.

#if SILVERLIGHT
  partial void OnStartMileageChanged(){
    RaisePropertyChanged("JourneyMileage");
  }

  partial void OnFinishMileageChanged(){
    RaisePropertyChanged("JourneyMileage");
  }

#endif

Это должно работать. Не проверял.

Другой способ, если вам не нужно свойство JourneyMilib на стороне сервера, создать частичный класс «Booking» на стороне клиента, определить ваше свойство и поместить мой код без условного выражения в частичный класс.

1 голос
/ 13 мая 2011

Вы НЕ обновляете свойство JourneyMilage. Он изменяется при изменении других полей.

Если вы хотите уведомить других о том, что его значение изменилось, внедрите INotifyPropertyChanged и также вызовите событие PropertyChanged для JourneyMilage при изменении StartMilage или FinishMilage.

EDIT

Посмотреть это сообщение

0 голосов
/ 31 июля 2012

Это должно работать. Не проверял.

1) Это не будет скомпилировано с Silverlight, если вам нужно уведомление об изменении свойства. Сгенерированный общий класс на стороне клиента взят из другого пространства имен (другой .dll в SL) и содержит другие сигнатуры методов для повышения свойства: - (

Другой способ, если вам не нужно свойство JourneyM Пробег на на стороне сервера, чтобы создать частичный класс «Бронирование» на стороне клиента, определите свою собственность и поставьте мой код без условного утверждения в частичном классе.

2) Это сработает и может стать разумным решением, однако вы не сможете затем поделиться бизнес-логикой с EDM: - (

3) Еще одним решением может быть добавление свойства к сгенерированному классу метаданных с атрибутом [DataMember]. Недостаток (или преимущество некоторых случаев использования) заключается в том, что изменение такого свойства приведет к изменению контекста.

...