В обычной автономной среде вы будете использовать что-то вроде Synchronization Services, чтобы справиться с этим, но это немного тяжелее для клиента Silverlight.
Я бы начал с присвоения каждому пункту в списке GUID. Затем я веду журнал вставок, обновлений и удалений списка на каждом клиенте и на сервере. Затем каждый раз, когда клиент подключается к серверу, вы должны выполнить синхронизацию слиянием. В этом случае вы должны обнаружить и обработать конфликты:
- Кто-то редактирует элемент, а кто-то удаляет его
- Два клиента редактируют элемент одновременно
Ваше требование обрабатывать переупорядочение предметов добавляет некоторую сложность. Возможно, вы захотите зарегистрировать переупорядочение как действие «перемещено до элемента x» или «перемещено после элемента x» вместо обновления всех индексов всех элементов в списке.