如何在使用用户设置关闭并重新启动应用程序时使TextBox保持文本

时间:2013-03-04 13:42:29

标签: wpf database data-binding

在我开始提出问题之前,我一直在阅读关于这个问题的所有可以想到的链接,但我仍然被卡住了。

我正在使用C#和Visual Studio组装WPF。我希望当应用程序关闭并重新启动时文本框中保留文本,并且文本是可读/写的,因为文本会经常更改。

我已经设置了一个新的.settings文件并将其放在我项目的Properties文件夹中。我使用漂亮的网格创建了这个,我可以在其中创建名称,类型和值等等。

几个小时后的几个星期,我觉得我离我很近但不确定。这是Designer.cs -

namespace PRX.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
    internal sealed partial class saveData : global::System.Configuration.ApplicationSettingsBase {

        private static saveData defaultInstance = ((saveData)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new saveData())));

        public static saveData Default {
            get {
                return defaultInstance;
            }
        }

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("mainSource")]
        public string Setting {
            get {
                return ((string)(this["Setting"]));
            }
            set {
                this["Setting"] = value;
            }
        }
    }
}

.settings文件名为saveData.settings,我将表设置为Name:Setting,Type:String,Value:mainSource。范围设置为用户。这与Properties文件夹中的默认Settings.settings文件类似。

问题中的TextBox如此连接如下:

                        <ScrollViewer VerticalScrollBarVisibility="Auto">
                            <TextBox DockPanel.Dock="Top" Margin="10" Background="Black" Name="tb1" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Source={x:Static p:saveData.Default}, Path=Default.Setting, Mode=TwoWay}"></TextBox>

                        </ScrollViewer>

这里有一个很好的衡量标准,它在app.config中的样子:

  <PRX.saveData>
   <setting name="Setting" serializeAs="String">
    <value>mainSource</value>
   </setting>
  </PRX.saveData>
 </userSettings>

我知道它已连接到.Settings文件,因为当我调试值'mainSource'出现在文本框中时

我已经阅读了关于这个主题的十多个链接,但最值得注意的是这两个:

http://blogs.msdn.com/b/patrickdanino/archive/2008/07/23/user-settings-in-wpf.aspx http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

我特别对此感到困惑,我正在阅读的文档看起来非常简单,但我似乎无法掌握它。任何帮助都非常感激。感谢

1 个答案:

答案 0 :(得分:0)

问题是你没有在你的设置上调用“保存()”为什么它没有保留,你可以尝试在窗口初始化时加载文本并在退出时将其保存到设置,你必须调用保存( )坚持你的设置

修改

正如您所说,文本框已连接到设置但未保存更改,为此,您必须在设置上调用“保存”并且无论您在何处执行此操作,例如您可以为文本添加处理程序改变:

    <TextBox DockPanel.Dock="Top" Margin="10" Background="Black" Name="tb1" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Source={x:Static p:saveData.Default}, Path=Default.Setting, Mode=TwoWay} TextChanged="tb1_TextChanged""></TextBox>

并为后面的代码添加处理程序:

    private void tb1_TextChanged(object sender, TextChangedEventArgs e)
    {
        Properties.saveData.Default.Save();
    }

检查此链接: http://blogs.msdn.com/b/patrickdanino/archive/2008/07/23/user-settings-in-wpf.aspx Best way to bind WPF properties to ApplicationSettings in C#?