Я бы использовал шаблон Model-View-ViewModel, который очень популярен в приложениях WPF и Silverlight.
Модель
Класс клиента - это объект в модели. Вам также нужен репозиторий или класс обслуживания, чтобы возвращать коллекции клиентов на основе различных критериев. В Silverlight данные извлекаются асинхронно, что немного усложняет ситуацию. Создавая интерфейс или абстрактный базовый класс для этого хранилища или класса обслуживания, вы можете протестировать класс ViewModel без использования базы данных. Вместо этого вы можете смоделировать некоторые тестовые данные.
ViewModel
ViewModel подключается к представлению с помощью привязки данных и должен либо реализовывать INotifyPropertyChanged
и / или INotifyCollectionChanged
, либо предоставлять свои данные с использованием свойств зависимости. Первый подход часто проще реализовать и протестировать.
В вашем примере кажется, что вы просто хотите отсортировать одну и ту же коллекцию, используя различные критерии сортировки. Ваша ViewModel - это коллекция объектов клиента. Отображать клиентов довольно просто, и ViewModel может содержать объекты сущностей клиентов напрямую. В более сложных сценариях, например где клиенты могут быть отредактированы, вы захотите создать модель представления клиентов.
Ваша ViewModel может быть производной от ObservableCollection<T>
или CollectionView
. Последний класс недоступен в Silverlight, и вам придется развернуть свой собственный, реализовав ICollectionView
.
В дополнение к тому, что ViewModel является коллекцией пользовательских объектов, ему также потребуются некоторые методы для определения порядка сортировки. На самом деле, возможно, разумнее добавить свойство SortOrder
в ViewModel и применить к нему коллекцию при изменении этого свойства.
Одним из важных моментов является то, что ViewModel не знает о пользовательском интерфейсе и может тестироваться независимо от пользовательского интерфейса.
View
Представление является UserControl
и реализовано с использованием XAML. Некоторые люди считают очень важным вообще не иметь никакого кода в представлении, но отсутствие команд в Silverlight требует либо некоторого кода, либо некоторых связанных с командами свойств (PRISM поддерживает это в Silverlight). *
DataContext
для View устанавливается на ViewModel, и элементы View затем связываются с различными частями ViewModel с помощью привязки данных. Кнопки и другие активные элементы управления пользовательского интерфейса подключаются к методам и т. Д. В ViewModel. В WPF вы можете использовать команды, но в Silverlight вам нужен какой-то код позади или что-то похожее на команды.
Когда пользователь нажимает на элемент управления в представлении, действие направляется в ViewModel либо как вызов метода, либо как изменение свойства. Затем ViewModel обновляется, и привязка данных из View в ViewModel обеспечивает отображение обновленной информации для пользователя.