我发现自己在应用程序类中经常使用单个绑定来存储属性,这导致了一个难以追踪的stackoverflow异常。现在我决定将这些属性移动到一个单独的单例ApplicationInfo类中,但我在绑定方面遇到了一些问题。
如果我直接绑定到我的类的成员属性,例如CurrentUser,那么它就可以正常工作。但是当我尝试将数据上下文绑定到此类时,我会得到编译器错误,并且我确定我已经忽略了一些简单的修改。
我已经将这个类创建为单例,但是现在当我尝试编译时,我会得到错误“未知生成错误 - 键不能为空”,并且它指向我的数据上下文绑定作为错误消息。
这是我的类:
public class ApplicationInfo
{
private ApplicationInfo()
{
}
private static ApplicationInfo _Current = new ApplicationInfo();
public static ApplicationInfo Current
{
get { return _Current; }
}
#region Application Info Properties
private static Assembly _ExecutingAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //holds a copy of this app's assembly info
public static String ApplicationName
{
get { return _ExecutingAssembly.ManifestModule.Name; }
}
public static String ApplicationNameTrimmed
{
get { return _ExecutingAssembly.ManifestModule.Name.TrimEnd('.', 'e', 'x'); }
}
public static String ApplicationPath
{
get { return _ExecutingAssembly.Location; }
}
public static String ApplicationVersion
{
get { return _ExecutingAssembly.GetName().Version.ToString(); }
}
public static DateTime ApplicationCompileDate
{
get { return File.GetCreationTime(Assembly.GetExecutingAssembly().Location); }
}
#endregion
private static Boolean _hasOpenWindows;
public static Boolean HasOpenWindows
{
get { return _hasOpenWindows; }
set { _hasOpenWindows = value; }
}
private static User _currentuser;
public static User CurrentUser
{
get { return _currentuser; }
set { _currentuser = value; }
}
private static Mantissa.DAL _datalayer;
public static Mantissa.DAL DataLayer
{
get { return _datalayer; }
set { _datalayer = value; }
}
private static string _connectionstring;
public static string ConnectionString
{
get { return _connectionstring; }
set { _connectionstring = value; }
}
}
这个有效:
`Title="{Binding Source={x:Static my:ApplicationInfo.ApplicationNameTrimmed}}"`
这个不行:(抛出“键不能为空”的错误消息)
DataContext="{Binding Source={x:Static my:ApplicationInfo.Current}}"
但是当我将相同的属性放在我的App类中时,它就有效了:
DataContext="{Binding Source={x:Static Application.Current}}"
那我该如何修复这个问题?