Это может быть полностью выполнено с помощью MVVM-совместимого способа, но не обязательно тривиально для новичков и не подходит для простых приложений.
Один подход, который я хотел бы использовать, состоит в том, чтобы сохранить коллекцию дескрипторов столбцов, сериализованных в базе данных . Дескрипторы столбцов - это просто мои собственные custom DTO data classes и содержат свойства, связанные с столбцом, то есть ширину, тип столбца, независимо от того, видна ли она видимость, ее ординал и т. Д. Все это делается с использованием простых структур и/или примитивов. Чистые типы, но конкретно не имеют каких-либо типов данных, связанных с пользовательским интерфейсом, в нем вообще .
Этот список ColumnDescriptors
может быть serialiased to and from XML и храниться в базе данных либо в nvarchar, либо в XML column. Особенно на SQL Server столбец XML лучше, поскольку вы можете запросить глубину в структурах XML, хранящихся в столбце базы данных.
Как и в случае с макетом пользовательского интерфейса, перед представлением запрашивать правильный набор дескрипторов столбцов из базы данных, я затем накачиваю эту коллекцию с помощью static GridColumnFactory class, который выполняет итерацию объектов дескриптора и создает мне соответствующие столбцы сетки и присваивает им соответствующие значения. Когда фабрика вернет эту коллекцию, представление затем добавит их в коллекцию колонок DataGrid.
Преимущества такого подхода:
Если я поменять на DataGrid, который используется (т.е. поменять местами от одного поставщика к другому, скажем, DevExpress к ComponentOne или native WPF), я могу просто изменить типы столбцы, возвращенные с заводского класса
Если я меняю что-либо в пользовательском интерфейсе, мне не нужно прикасаться к дескрипторам столбцов, которые хранятся.
Serialising и из XML означает, что если я добавить/удалить свойства из дескрипторов, то старые сохраненные копии могут все еще быть размещены, они немедленно не сломаны момент я выпустить обновление
Один из лучшие возможности всего, что я могу изменить сохраненные расположения столбцов с помощью простого оператора SQL, мне не нужно также выпускать скомпилированный код
Последнее: использование дескрипторов столбцов делает тривиальным реализовать указанный пользователем макет, т.е.когда вы отпускаете их перетаскивать столбцы вокруг, а затем хотите сохранить макет в следующий раз
Если я хочу, чтобы получить действительно обалденный, дескрипторы столбцов могут быть возвращены из WebService
Для на веб-сайте они также могут храниться в свободном XML-файле, который затем считывается и хранится в кеше.
При таком подходе вы должны всегда избегать использования специализированных или поставщика конкретных типов данных, так как они не обязательно сериализации хорошо (если вообще), и станут слабым местом в будущем - это будет быть наиболее вероятными вещами, которые вы должны изменить, и если эти изменения нарушат любые сохраненные дескрипторы, которые у вас уже есть.
Можете ли вы, пожалуйста, направить меня на образец приложения, пожалуйста. – staticshockdracoon
@staticshockdracoon Нет, AFAIK нет никаких примеров проектов для этого - это образец/методология, которую я разработал сам и использовал в приложениях WPF, ASP.NET и Silverlight. Вы знаете, что шаблон хорош, когда вы можете использовать его в таких технологиях. – slugster