Сессия в WPF?

В ASP.NET я могу сделать Session["something"] = something;, а затем я могу получить на другой странице значение сеанса. Есть ли сеанс в WPF, который позволит мне сделать то же самое в ASP.NET? Я заметил, что в WPF нет сеанса, потому что есть состояние. Поскольку у меня появилось много пользовательских контрольных страниц, мне нужно получить его значения и отобразить их на MainWindow.

Есть ли что-то похожее на Session в WPF?

Некоторые ресурсы говорят, что используют файлы cookie. Как мне это сделать? mine Является ли приложение WPF не веб-приложением WPF?

Ответ 1

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

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

public static class Global
{
    private string s_sSomeProperty;

    static Globals ()
    {
        s_sSomeProperty = ...;
        ...
    }

    public static string SomeProperty
    {
        get
        {
            return ( s_sSomeProperty );
        }
        set
        {
            s_sSomeProperty = value;
        }
    }

    ...
}

Таким образом вы можете просто написать Global.SomeProperty в любом месте вашего кода, где доступен класс Global.

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

Это решение лучше, чем использование чего-то вроде сеанса, потому что ваши свойства будут строго типизированы, и нет никакого поиска по строкам для значения свойства.

Ответ 2

Одна из возможностей заключается в использовании:

Application.Current.Resources["something"] = something;

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

Ответ 3

Как вы уже знаете, в приложении wpf на настольном компьютере нет такой вещи, как сеанс. Если вы реализуете учетные записи в своем приложении wpf, и если вы можете предоставить постоянную услугу для каждого пользователя, это будет похоже на сеанс. Я рекомендую вам попробовать NDatabase, которая представляет собой очень простую и мощную базу данных объектов с открытым исходным кодом.

http://ndatabase.codeplex.com/

Они также предоставляют хорошие учебные пособия. Проверьте их учебник по 1 минуте и 5-минутный учебник.