我很喜欢使用一些WPF代码而且我有一个很大的问题。我添加了由visual studio生成的设置,我想在窗口中使用它作为绑定。所以我创造了类似的东西:
<TextBox VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Name="username_textbox" Text="{Binding Source={StaticResource Settings}, Mode=TwoWay, Path=Default.Password}" />
当我在App.xaml声明时,没关系:
<Application x:Class="BlinkLinkClient.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:properties="clr-namespace:BlinkLinkClient.Properties"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="GeneralResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
<properties:Settings x:Key="Settings" />
</ResourceDictionary>
</Application.Resources>
</Application>
但我在网上发现这种方法有时会崩溃,所以我使用了其他方法:
<TextBox VerticalAlignment="Center" Grid.Row="1" Name="password_textbox" Text="{Binding Source={x:Static properties:Settings.Default}, Path=password}" Grid.Column="1" />
我的专业名称空间是:
xmlns:properties="clr-namespace:BlinkLinkClient.Properties"
绑定期间输出错误
System.Windows.Data错误:40:BindingExpression路径错误:'对象'''设置'(HashCode = 32985660)'上找不到'用户名'属性。 BindingExpression:路径=用户名; DataItem ='Settings'(HashCode = 32985660); target元素是'TextBox'(Name =''); target属性是'Text'(类型'String')
设置类(只有一个道具,每个道具类似):
namespace BlinkLinkClient {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute
("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
public partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("user@gmail.com")]
public string Username {
get {
return ((string)(this["Username"]));
}
set {
this["Username"] = value;
}
}
}
没有任何事情发生,数据没有存储甚至显示(我提供默认值,并在其他代码中设置,我可以完全访问它)。我做错了什么?感谢
答案 0 :(得分:1)
第二种方法(StaticExtension
获取Settings
实例+ Binding
,设置名称为Path
)是正确的。第一种方法不起作用,因为它创建了一个单独的设置实例并且路径不正确(您无法绑定到静态属性)。
请检查信件案例。在第一个示例中,属性名为Password
,但在第二个示例中为password
。在“输出”窗口中查找绑定错误。您也可以尝试使用PresentationTraceSources.TraceLevel
附加属性进行调试。
此外,为了保存属性,您需要在某处调用Save()
方法。绑定只会更改属性值,它不会存储它们。