代码之家  ›  专栏  ›  技术社区  ›  Meysam Javadi

类似于Silverlight中的exec命令(动态保存和加载元素的属性)

  •  0
  • Meysam Javadi  · 技术社区  · 16 年前

    我的容器中有一些元素,希望保存这些元素的所有属性。我列出这个元素 VisualTreeHelper 并将其属性保存在数据库中,问题是如何检索这些属性并影响它们?我认为 Silverlight 在中具有类似exec的语句 Sql-Server .

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

    编辑: 假设这个场景:最终用户从mytoolbox(类似容器的 Grid )对话框显示其创建属性并最终绘制 网格 . 在恢复时,他/她选择一个元素(例如 Button )把它放到网格的一个单元上。现在我想保存他/她创建的工作区!我的 RootLayout 有一个容器控件,所以任何元素都是这个的子元素。 迄今为止 我要创建一个包含所有 一般的 属性(不是全部)并保存到 DB ,当我加载此控件时,我通过 type 我保存并受保存的属性影响; 有点像 EXEC 命令 .

    这有可能吗? 你有没有这个场景的新方法(请给我举个例子)。

    FINAL ANSWER HERE

    1 回复  |  直到 16 年前
        1
  •  1
  •   slugster Joey Cai    16 年前

    你可能想试试 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文件从独立的存储中加载设置,然后在它创建的每个控制器的构造函数中传递字典,然后每个控制器将把字典传递给它创建的每个视图。要保存设置,我将处理应用程序的退出事件:

    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
    }
    

    当然,当我这样做的时候,我使用一个自定义的数据对象来保持我的设置,并且我可以选择调用一个WebService来检索默认设置,如果找不到本地实例(或者发现本地实例已损坏,因为保存过程因某种原因被中断)。

    所以以上面的例子为例,把它切成薄片,然后切丁,然后根据你的需要改变它。希望有帮助。