喜欢silverlight中的exec命令(动态保存和加载Elements的属性)

时间:2010-04-04 04:24:11

标签: c# silverlight silverlight-3.0

我的容器中有一些元素,想要保存这些元素的所有属性。我按VisualTreeHelper列出这个元素并将其属性保存在DB中,问题是如何检索这些属性并影响它们?我认为Silverlight有一些陈述与Sql-Server中的Exec相似。

我将属性保存在由分号分隔的一行中。(如果您有任何建议,请欣赏)

编辑:假设这种情况:最终用户从Mytoolbox(像Grid这样的容器)中选择一个工具,一个对话框显示了其创建属性,最后绘制了Grid 。在恢复中,他/她选择一个元素(如Button)并将其放在网格的一个单元格上。现在我想保存他/她创建的工作空间!我的RootLayout有一个容器控件,因此任何元素都是其子元素。 HERETOFORE 我想创建一个包含所有一般属性的字符串(不是全部)并保存到DB,当我加载此控件时,我通过我保存的type创建一个元素,并通过我保存的属性对其进行影响;使用EXEC命令之类的

这可能吗? 你有这个场景的新方法(请举例说明)。

FINAL ANSWER HERE

1 个答案:

答案 0 :(得分:1)

您可能需要尝试Isolated File Storage,您可以将设置保存/加载到本地硬盘。这样做非常简单,只需几行代码即可。

  

我认为Silverlight有一些表现得像Exec

的声明

不,不是:)

修改:好的,这里有一个关于如何将本地保存的设置应用到UI元素的指南。

首先,确定您的可设置控件将实现的接口:

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文件从Isolated Storage加载设置,然后在它创建的每个控制器的构造函数中传递Dictionary,然后每个控制器将它传递给它创建的每个视图。要保存设置,我处理应用程序的Exit事件:

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
}

当然,当我这样做时,我使用自定义数据对象来保存我的设置,如果找不到本地实例(或发现本地实例已损坏,我可以选择调用web服务来检索默认设置,因为由于某种原因,它的保存被中断了。)

因此,请参考上面的示例,将其切片并切块,然后根据您的需要进行更改。希望它有所帮助。