Изолированное хранилище Silverlight и DevExpress Grid - PullRequest
0 голосов
/ 20 июля 2011

Продукты DevExpress всегда обеспечивали хорошую поддержку постоянным предпочтениям пользователей. Мой опыт работы с DevExpress простирается от ранних версий Delphi до настоящих версий .Net, и я видел варианты сохранения настроек в реестре Windows, XML и других.

Сейчас я использую Silverlight DXGrid (2011 г., том 1), и кажется естественным сохранять пользовательские настройки сетки в изолированном хранилище, поэтому он остается между сеансами. Какой лучший способ достичь этого? Есть ли встроенный способ? И если мне придется сделать это самому, есть ли хотя бы объект, представляющий параметры, которые я могу сериализовать, или мне придется написать собственную схему сериализации?

Я просмотрел документацию для классов GridControl и TableView и не нашел встроенного способа для достижения этой цели (например, метод WriteSettingsToIsolatedStorage()).

1 Ответ

0 голосов
/ 21 июля 2011

С некоторой помощью службы поддержки DevExpress, я нашел эту статью , описывающую, как делать то, что я хотел.

Я поднял его на следующий уровень с методами расширения, описанными ниже, которые используютимя сетки для сохранения и восстановления ее макета.Я могу делать звонки, которые я хотел:

gridControl.SaveLayoutToIsolatedStorage();
gridControl.RestoreLayoutFromIsolatedStorage();

Вот код:

public static class GridSettingsExtension
{
    private const string layoutFolderName = "dxGridLayout";
    private static readonly Func<GridControl, string> gridLayoutFile = g => g.Name + ".xml";

    public static bool IsLayoutSaved( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();
        var fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        return file.FileExists( fullPath );
    }

    public static void SaveLayoutToIsolatedStorage( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();

        if( !file.DirectoryExists( layoutFolderName ) ) {
            file.CreateDirectory( layoutFolderName );
        }

        string fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        using( var fs = file.CreateFile( fullPath ) ) {
            gridControl.SaveLayoutToStream( fs );
        }
    }

    public static void RestoreLayoutFromIsolatedStorage( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();
        var fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        using( var fs = file.OpenFile( fullPath, FileMode.Open, FileAccess.Read ) ) {
            gridControl.RestoreLayoutFromStream( fs );
        }
    }
}
...