#silverlight #ria
#silverlight #ria
Вопрос:
Я запускаю службы RIA с silverlight 4.
У меня есть объекты служб RIA, которые являются производными от этого класса,
System.ServiceModel.DomainServices.Client.Entity
Они помечаются как измененные (используя либо поле hasChanges, либо поле EntityState), когда они не изменены. Мне нужен более надежный способ определить, какие из моих сущностей изменились.
Причина в том, что у меня есть три текстовых поля в моей сущности: обычное текстовое поле, поле расширенного текста и поле HTML. Все они связаны с одним и тем же текстом. Их отображение в моем элементе управления editor слегка изменило форматированный текст и HTML-поля, но не обычное текстовое поле.
Итак, я хотел бы в идеале сделать что-то вроде этого,
«Есть ли у сущности какие-либо измененные поля, отличные от полей HTML или форматированного текста»
Поле обычного текста будет отображать «фактические» изменения, которые пользователь вносит в текст.
В базовом классе Entity есть несколько непубличных элементов, называемых ‘ModifiedProperties’ и ‘OriginalValues’, которые были бы идеальными, если бы существовал способ их использования?
Комментарии:
1. Вы смотрели на
ObjectContext.ChangeSetEntries
?2. Однако является ли ObjectContext на стороне клиента?
Ответ №1:
Хорошо, при ближайшем рассмотрении оказывается, что элемент управления форматированным текстом, который я использую, не поддерживает привязку. Это означает, что в коде есть что-то вроде этого,
public void LoadText() // loads from the database and puts into the UI control
{
control.RichText = entity.RichText;
control.Html = entity.Html;
control.Body = entity.Body;
}
и
public void UpdateText() // update the entity with the updated text
{
entity.RichText = control.RichText;
entity.Html = control.Html;
entity.Body = control.Body;
}
Я использую жидкость управления третьей стороны.RichTextBlock. Оказывается, что этот элемент управления в некоторых случаях возвращает другой формат RichText и HTML, даже если текст не редактировался. Это может относиться к ширине элемента управления, который находится во всплывающем окне с изменяемым размером.
Жидкость.Элемент управления RichTextBlock имеет свойство, называемое «История», и я действительно могу использовать это свойство, чтобы сообщить мне, действительно ли пользователь обновил текст.
В принципе, что-то вроде этого,
public void UpdateText() // update the entity with the updated text
{
if (control.History.Count > 0) // the user has updated the format and or the text
{
entity.RichText = control.RichText;
entity.Html = control.Html;
entity.Body = control.Body;
}
}