Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf-将datacontext绑定到singleton类的静态属性_C#_.net_Wpf_Binding - Fatal编程技术网

C# wpf-将datacontext绑定到singleton类的静态属性

C# wpf-将datacontext绑定到singleton类的静态属性,c#,.net,wpf,binding,C#,.net,Wpf,Binding,我发现自己使用了很多单独的绑定到我的应用程序类来存储属性,这导致了一个无法追踪的stackoverflow异常。我现在决定将这些属性移动到一个单独的singleton ApplicationInfo类中,但绑定有一些问题 如果我直接绑定到类的成员属性,比如CurrentUser,那么它就可以正常工作。但是,当我尝试将datacontext绑定到这个类时,我会遇到编译器错误,并且我确信有一些我忽略的简单修改 我已经从这个类中创建了一个singleton,但是现在当我尝试编译时,我得到了错误“Unk

我发现自己使用了很多单独的绑定到我的应用程序类来存储属性,这导致了一个无法追踪的stackoverflow异常。我现在决定将这些属性移动到一个单独的singleton ApplicationInfo类中,但绑定有一些问题

如果我直接绑定到类的成员属性,比如CurrentUser,那么它就可以正常工作。但是,当我尝试将datacontext绑定到这个类时,我会遇到编译器错误,并且我确信有一些我忽略的简单修改

我已经从这个类中创建了一个singleton,但是现在当我尝试编译时,我得到了错误“Unknown build error-key cannot be null”,它指向错误消息的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}}"`
  DataContext="{Binding Source={x:Static Application.Current}}"
这不是:(抛出的键不能为null msg)

但当我将相同的属性放在我的应用程序类中时,这是可行的:

`Title="{Binding Source={x:Static my:ApplicationInfo.ApplicationNameTrimmed}}"`
  DataContext="{Binding Source={x:Static Application.Current}}"

那么我该如何解决这个问题呢

x:Static用于获取静态字段和属性。ApplicationInfo是一个类,而不是一个属性。要绑定,必须创建它的实例并使用其实例属性,或者绑定到静态属性(访问它不需要实例)

如果要绑定到特定属性,请使用
Title=“{Binding Source={x:Static my:ApplicationInfo.applicationnametimed}}”


如果要设置DataContext,然后使用与其他属性的绑定,请使用
DataContext=“{Binding Source={x:Static my:ApplicationInfo.Current}”
并将静态属性转换为实例属性(remove Static关键字)。您还可以这样绑定:
Title=“{Binding Source={x:Static my:ApplicationInfo.Current.ApplicationNameTrimmed}}”

谢谢Athari,这很有帮助。我试图避免在几个屏幕上使用大量额外的绑定语法,这样我就可以使用这个类来跟踪当前用户、当前连接字符串等。这个特定的类转换为实例类没有意义,因为这样我就必须执行application myappref=(app)application.current;myappref.ApplicationInfo对象只是为了获得一个引用来做一些事情。因此,我猜额外的语法将是。