Проще всего поддерживать постоянный пользовательский интерфейс клиента - это просто обновлять данные так часто. Если это действительно так важно, вы можете установить DispatcherTimer
галочкой каждую минуту, когда вы сможете получить последние данные, которые отображаются.
Очевидно, я не предлагаю обновить элемент, который редактируется, но если вы получите свежие данные, вы можете, конечно, сравнить коллекции с тем, что отображается в настоящее время. Вместо того, чтобы просто заменять старые элементы коллекции новым, вы можете быть более дружественными к пользователю и просто добавлять новые, удалять удаленные и обновлять новые.
Вы даже можете определить, был ли сохраненный в данный момент элемент другим пользователем, так как текущий пользователь открыл его и предупредил об этом. Поэтому вместо того, чтобы сосредоточиться на какой-либо системе для отслеживания всех изменений данных, вы должны приложить все усилия, чтобы обнаруживать изменения между двумя наборами данных, а затем легко интегрировать их в текущее состояние пользовательского интерфейса.
UPDATE >>>
Там нет абсолютно никакой пользы от проведения полного набора данных в приложении (или хранилище). Фактически, вы вполне можете обнаружить, что это добавляет вредных эффектов из-за дополнительных требований к ОЗУ. Если вы проводите опрос данных каждые несколько минут, это всегда будет актуальным в любом случае.
Чтобы не запрашивать все данные за все время, просто спросите, что пользователь хочет увидеть (в зависимости от того, какой вид они сейчас находятся) и обновлять его время от времени. Я делаю это, просто получая одни и те же данные, которые требуется для просмотра при первом открытии. Я написал несколько методов, которые сравнивают каждое свойство каждого элемента со своими более старыми аналогами в пользовательском интерфейсе и переключают старые на новые.
Think метода Equals
... Вы могли бы сделать что-то вроде этого:
public override bool Equals(Release otherRelease)
{
return base.Equals(otherRelease) && Title == otherRelease.Title &&
Artist.Equals(otherRelease.Artist) && Artists.Equals(otherRelease.Artists);
}
(Не на самом деле использовать метод Equals
, хотя, или вы столкнетесь с проблемами позже). А потом что-то вроде этого:
if (!oldRelease.Equals(newRelease)) oldRelease.UpdatePropertyValues(newRelease);
И/Или это:
if (!oldReleases.Contains(newRelease) oldReleases.Add(newRelease);
Я предполагаю, что вы получите изображение сейчас.
Спасибо. Это имеет большой смысл. Мне любопытно, что было бы быстрым способом увидеть, какие новые сущности были добавлены в БД в EF. Если я правильно разбираюсь в шаблоне хранилища, репозиторий «Клиент». будут иметь все объекты-клиенты EF, и репо будет периодически опробовать БД и найти новых клиентов.Как бы я обнаружил, какие новые сущности находятся в БД, и что мой список репо в настоящее время имеет без грубой силы? Благодаря! –
Спасибо за обновление. Все это имеет смысл. Я предполагаю, что у меня были проблемы с тем, что хранилище на самом деле хранит, и почему выгодно хранить вещи, к которым пользователь обращается в памяти, если они вряд ли нуждаются в этом снова. –