在C#中将WPF属性绑定到ApplicationSettings的最佳方法是什么?是否有像Windows窗体应用程序一样的自动方式?与此问题类似,您如何(并且可能)在WPF中执行相同的操作?
您可以直接绑定到Visual Studio创建的静态对象.
在你的windows声明中添加:
xmlns:p="clr-namespace:UserSettings.Properties"
UserSettings
应用程序命名空间在哪里.
然后,您可以将绑定添加到正确的设置:
现在,您可以在关闭应用程序时按照示例保存设置:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { Properties.Settings.Default.Save(); base.OnClosing(e); }
如果你是一个尝试这个的VB.Net开发人员,答案是不同的.
xmlns:p="clr-namespace:ThisApplication"
请注意.Properties不存在.
在你的绑定中它是MySettings.Default,而不是Settings.Default - 因为app.config以不同的方式存储它.
拉了一下头发后,我发现了这一点.希望能帮助到你
3> Remus..:我喜欢接受的答案,但我碰到了一个特例.我将我的文本框设置为"只读",以便我只能在代码中更改它的值.我无法理解为什么这个值没有传播回设置,尽管我将模式设为"TwoWay".
然后,我发现了这个:http: //msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx
默认值为Default,它返回目标依赖项属性的默认UpdateSourceTrigger值.但是,大多数依赖项属性的默认值是PropertyChanged,而Text属性的默认值是LostFocus.
因此,如果您具有带有IsReadOnly ="True"属性的文本框,则必须将UpdateSourceTrigger = PropertyChanged值添加到Binding语句:
4> Richard Szal..:最简单的方法是绑定到一个对象,该对象将您的应用程序设置公开为属性,或者将该对象包含为StaticResource并绑定到该对象.
您可以采取的另一个方向是创建自己的标记扩展,这样您就可以使用PropertyName ="{ApplicationSetting SomeSettingName}".要创建自定义标记扩展,您需要继承MarkupExtension并使用MarkupExtensionReturnType属性修饰该类.John Bowen 发表了一篇关于创建自定义MarkupExtension的文章,可能会让这个过程更加清晰.