UWP Использование x: Bind для мониторинга глобальных переменных - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть приложение, которое группирует все глобальные переменные в одном классе. Они используются над многими классами в приложении. (300+ переменных, сокращено для демонстрации):

public class Vars
{
    public static string DateStr = "";
}

Я хочу использовать x: Привязать к одностороннему связыванию данных с полями на странице:

<TextBlock x:Name="Local_Data" Text="{x:Bind local:Vars.DateStr, Mode=OneWay}" Style="{StaticResource TextBlockStyle1}"/>

Привязка OneTime кажется, работает нормально. Я могу обновить sh страницы, и DateStr отражает новое значение.

Я изменил определение класса Vars на:

public class Vars : INotifyPropertyChanged
{

    private static string _DateStr = "hello";

    public static string DateStr
    {
        get { return _DateStr; }
        set
        {
            _DateStr = value;
            OnPropertyChanged();
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    /// <summary>
    /// Raises this object's PropertyChanged event.
    /// </summary>
    /// <param name="propertyName">The property that has a new value.</param>
    protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }
    #endregion
}

Когда я пытаюсь построить, я получаю сообщение:

Ссылка на объект требуется для нестатического c поля, метода или свойства 'Vars.OnPropertyChanged (string)'

Если изменить его на :

    protected static void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

Я получаю сообщение:

Ключевое слово "this" недопустимо для свойства stati c, метода stati c или stati c инициализатор поля

Я предполагаю, что это что-то тривиальное, что я пропускаю. Как правильно пометить изменение данных?

Спасибо за вашу помощь. Dan

1 Ответ

0 голосов
/ 22 апреля 2020

Как уже упоминалось в сообщении об ошибке, причиной вашей проблемы является то, что вы используете модификатор Static для свойства источника привязки - Vars.DateStr. Вам просто нужно удалить модификатор Static свойства Vars.DateStr.

  public  string DateStr
    {
        get { return _DateStr; }
        set
        {
            _DateStr = value;
            OnPropertyChanged("DateStr");
        }
    }
...