как команда exec в silverlight (динамическое сохранение и загрузка свойств элементов) - PullRequest
0 голосов
/ 04 апреля 2010

У меня есть какой-то элемент в моем контейнере, и я хочу сохранить все свойства этих элементов. я перечисляю этот элемент по VisualTreeHelper и сохраняю его атрибуты в БД, вопрос в том, как получить эти свойства и повлиять на них? я думаю, что у Silverlight есть какое-то утверждение, которое ведет себя как Exec в Sql-Server.

я сохраняю свойства в одну строку, разделенную точкой с запятой (если у вас есть предложения, оцените)

Редактировать: предположим, что такой сценарий: Конечный пользователь выбирает инструмент из Mytoolbox (контейнер, такой как Grid), диалоговое окно показывает его свойства для создания и, наконец, рисует Grid. при возобновлении он / она выбирает один элемент (например, Button) и помещает его в одну из ячеек сетки. Теперь я хочу сохранить рабочее пространство, которое он создал! У моего RootLayout есть один контейнерный элемент управления, поэтому любой элемент является его дочерним элементом. HERETOFORE Я хочу создать одну строку, содержащую все общие свойства (не все из них), и сохранить в DB, и когда я загружаю этот элемент управления, я создаю элемент с помощью type, который я сохранил, и на него влияют свойства, которые я сохранил; с чем-то вроде EXEC команда .

это возможно? есть ли у вас новый подход к этому сценарию (приведите, пожалуйста, пример).

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ ЗДЕСЬ

1 Ответ

1 голос
/ 04 апреля 2010

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

я думаю, что у Silverlight есть какое-то утверждение, которое ведет себя как Exec

Нет, это не так:)

Редактировать: хорошо, вот руководство о том, как можно применить локально сохраненные настройки к элементам пользовательского интерфейса.

Прежде всего, определитесь с интерфейсом, который будут реализовывать ваши настраиваемые элементы управления:

public interface IMySettableSettingsControl
{
    Dictionary<string, object> RetrieveSettings();
    void ApplySettings(Dictionary<string, object> settings);
}

Теперь добавьте этот интерфейс к вашим элементам управления, который сохранит их настройки локально:

public MyControl : IMySettableSettingsControl 
{
    public void ApplySettings(Dictionary<string, object> settings) 
    {
        if (settings.Key.Contains("TextboxContents"))
            someTextBox.Text = (string) settings["TextboxContents"];

        if (settings.Key.Contains("Height"))
            this.Height = (double) settings["Height"];

        ((IMySettableSettingsControl) someChildControl).ApplySettings( (Dictionary<string, object>) settings["MyChildControl"])
    }

    public Dictionary<string, object> RetrieveSettings()
    {
        Dictionary<string, object> localSettings = new Dictionary<string, object>();
        localSettings.Add("Height", this.Height);
        localSettings.Add("TextboxContents", someTextBox.Text);

        localSettings.Add("MyChildControl", ((IMySettableSettingsControl) someChildControl).RetrieveSettings();
    }
}

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

Application.Current.Exit += new EventHandler(Current_Exit);

и затем в обработчике:

private void Current_Exit(object sender, EventArgs e)
{
    Dictionary<string, object> settings = new Dictionary<string, object>();

    //call each UI control or controller, passing in the settings object

    //now i can persist the settings dictionary to IsolatedStorage
}

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

Итак, возьмите приведенный выше пример, нарежьте его, нарежьте кубиками и измените в соответствии с вашими потребностями. Надеюсь, это поможет.

...