Реализовать хранение данных между вызовами? (C # - WPF) - PullRequest
1 голос
/ 06 января 2010

У меня есть приложение ALPHA, которое позволяет вам получить обфусцированный шрифт из XPS-файла и сохранить файл .odttf для использования в Silverlight. Приложение «работает» так же, как оно выполняет то, что написано на жестяной банке, хотя и очень грубо.

В процессе очистки этого инструмента для создания бета-версии я могу решить проблему. Я хочу, чтобы приложение было оформлено в стиле мастера, который будет собирать данные от пользователя, например, какой шрифт использовать, где сохранить извлеченный файл и т. Д.

В текущей реализации все это делается в коде позади (на самом деле он вызывает вспомогательный класс). Но реализация мастера означает, что каждый фрагмент данных собирается на отдельной «странице». Я не хотел просто передавать данные с помощью конструкторов страниц, поскольку я пытаюсь реализовать MVVM, целью которого является поддержание чистоты кода.

Полагаю, я ищу хранилище данных в коде, в котором сохраняются окна. таким образом я могу получить данные в моем окне (представление), передать их в мою модель представления через привязку и отправить их в модель Windows (класс данных) для хранения где-либо.

Я мог бы использовать базу данных или файл XML, но это похоже на переполненное хранилище для нескольких частей информации, которые мне нужны.

Итак, в заключение, существует ли способ иметь объект в памяти, который сохраняет вызовы окон и на который могут ссылаться несколько моделей (классов).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Статический класс или синглтон для хранения ваших данных и доступа к ним из всех ваших просмотров?

0 голосов
/ 06 января 2010

Лучший способ - использовать одну и ту же модель представления для всех страниц, а затем сериализовать ее, если вы захотите использовать ее позже.

public class MyViewModel
{
    // Properties to be serialized
    public string MyViewModelProperty1 = "";
    public string MyViewModelProperty2 = "";

    // Save to file.
    public virtual bool Save(string viewmodelFilePath)
    {
        try
        {
            Directory.CreateDirectory(Path.GetDirectoryName(viewmodelFilePath));
            StreamWriter write = new StreamWriter(viewmodelFilePath);
            XmlSerializer xml = new XmlSerializer(GetType());
            xml.Serialize(write, this);
            write.Close();
        }
        catch
        {
            return false;
        }
        return true;
    }

    // Load from file.
    public static object Load(Type type, string viewmodelFilePath)
    {
        StreamReader reader;
        object settings;
        XmlSerializer xml = new XmlSerializer(type);

        try
        {
            reader = new StreamReader(viewmodelFilePath);
            viewmodel = xml.Deserialize(reader);
            reader.Close();
        }
        catch
        {
            viewmodel = 
                type.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        }
        return viewmodel;
    }
}

Оригинальный код из книги Петцольда

...