wpf - привязка текста данных к статическим свойствам одноэлементного класса - PullRequest
10 голосов
/ 26 октября 2010

Я обнаружил, что использую множество индивидуальных привязок к своему классу App для хранения свойств, и это привело меня к неисследуемому исключению stackoverflow.Теперь я решил перенести эти свойства в отдельный одноэлементный класс ApplicationInfo, но у меня возникли некоторые проблемы с привязкой.

Если я связываюсь напрямую со свойством члена моего класса, таким как CurrentUser, тогда оно работаетхорошо.Но когда я пытаюсь связать текст данных с этим классом, я получаю ошибки компилятора, и я уверен, что есть некоторые простые модификации, которые я упустил.

Я создал синглтон из этого класса, но теперь, когда япопробуйте скомпилировать я получаю сообщение об ошибке «Неизвестная ошибка сборки - ключ не может быть нулевым», и он указывает на мою привязку 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 my:ApplicationInfo.Current}}"

Но когда я помещаю то же свойство в мой класс приложения, это работает:

  DataContext="{Binding Source={x:Static Application.Current}}"

так как мне это исправить?

1 Ответ

11 голосов
/ 26 октября 2010

x: Статический используется для получения статических полей и свойств.ApplicationInfo - это класс, а не свойство.Чтобы выполнить привязку, вы должны либо создать его экземпляр и использовать его свойство экземпляра, либо выполнить привязку к статическому свойству (для доступа к нему не требуется экземпляров).

Если вы хотите выполнить привязку к определенному свойству, используйтеTitle="{Binding Source={x:Static my:ApplicationInfo.ApplicationNameTrimmed}}".

Если вы хотите установить DataContext, а затем использовать привязки к другим свойствам, используйте DataContext="{Binding Source={x:Static my:ApplicationInfo.Current}}" и преобразуйте статические свойства в свойства экземпляра (удалите ключевое слово static).Вы также сможете связывать это так: Title="{Binding Source={x:Static my:ApplicationInfo.Current.ApplicationNameTrimmed}}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...