wpf - liaison datacontext aux propriétés statiques de la classe singleton
J'ai trouvé moi-même à l'aide d'une beaucoup de personne liaisons de ma classe App pour la conservation des propriétés et cela m'a conduit à un untracable stackoverflow exception. J'ai maintenant décidé de me déplacer ces propriétés à un singleton ApplicationInfo classe, mais je vais avoir quelques problèmes avec la liaison.
Si je lier directement à un membre de la propriété de ma classe, comme CurrentUser puis il fonctionne très bien. Mais quand j'essaie de lier un datacontext de cette classe j'obtiens des erreurs de compilation et je suis sûr qu'il ya des modifications simples que j'ai négligé.
J'ai créé un singleton de cette classe, mais maintenant, quand j'essaie de compiler, je reçois l'erreur "Unknown erreur de build - key ne peut pas être null" et il pointe vers mon Datacontext de liaison pour le message d'erreur.
Voici ma classe:
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; }
}
}
Cela fonctionne:
`Title="{Binding Source={x:Static my:ApplicationInfo.ApplicationNameTrimmed}}"`
Ce n'est pas: (jette la clé ne peut pas être null msg)
DataContext="{Binding Source={x:Static my:ApplicationInfo.Current}}"
Mais quand j'ai mis la même propriété dans mon Appli classe alors cela fonctionne:
DataContext="{Binding Source={x:Static Application.Current}}"
alors, comment puis-je résoudre ce problème?
source d'informationauteur TWood
Vous devez vous connecter pour publier un commentaire.
x:Statique est utilisée pour obtenir les champs statiques et propriétés. ApplicationInfo est une classe, et non une propriété. Pour lier, vous devez créer une instance de celle-ci et l'utilisation de sa propriété d'instance, ou se lier à une propriété statique (l'accès à l', il ne nécessite pas d'instances).
Si vous souhaitez lier à une propriété spécifique, utilisez
Title="{Binding Source={x:Static my:ApplicationInfo.ApplicationNameTrimmed}}"
.Si vous souhaitez définir DataContext et ensuite d'utiliser des liaisons à d'autres propriétés, utilisez
DataContext="{Binding Source={x:Static my:ApplicationInfo.Current}}"
et convertir des propriétés statiques pour des propriétés d'une instance (retirer le mot-clé static). Vous serez également capable de se lier comme ceci:Title="{Binding Source={x:Static my:ApplicationInfo.Current.ApplicationNameTrimmed}}"
.