我發現自己使用了很多單獨綁定到我的App類來存儲屬性,這導致我陷入了一個難以逾越的stackoverflow異常。我現在決定將這些屬性移到一個單獨的單例ApplicationInfo類中,但我在綁定時遇到了一些問題。wpf - 將datacontext綁定到單例類的靜態屬性
如果我直接綁定到我的類的成員屬性,如CurrentUser,那麼它工作正常。但是,當我嘗試綁定一個datacontext到這個類時,我得到編譯器錯誤,我確信有一些簡單的修改,我忽略了。
我已經創建了這個類的單例,但現在當我嘗試編譯時,我得到錯誤「未知的構建錯誤 - 鍵不能爲空」,它指向我的Datacontext綁定的錯誤消息。
這裏是我的類:
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}}"`
這不:(拋出鍵不能爲空MSG)
DataContext="{Binding Source={x:Static my:ApplicationInfo.Current}}"
但是,當我把在我的應用類相同的屬性,然後這個作品:
DataContext="{Binding Source={x:Static Application.Current}}"
那麼我該如何解決這個問題?
感謝Athari,這很有幫助。我試圖在幾個屏幕上避免大量額外的綁定語法,這樣我就可以使用這個類來跟蹤當前用戶,當前連接字符串等。這個特定的類沒有意義轉換爲實例類,因爲那麼我必須做 應用程序myappref =(app)Application.Current;myappref.ApplicationInfoObject只是爲了得到一個引用來做某事。所以我猜想它會是額外的語法。 – TWood 2010-10-25 20:48:51