首页 > 解决方案 > UWP 使用 x:Bind 监控全局变量

问题描述

我有一个应用程序将所有全局变量分组到一个类中。它们用于应用程序中的许多类。(300 多个变量,为演示而缩短):

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

我想使用 x:Bind to One-way 将数据绑定到页面上的字段:

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

OneTime 绑定似乎工作正常。我可以刷新页面,并且 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
}

当我尝试构建时,我收到消息:

非静态字段、方法或属性“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”在静态属性、静态方法或静态字段初始值设定项中无效

我认为我错过了一些微不足道的事情。标记数据更改的正确方法是什么?

谢谢你的帮助。担

标签: c#xamldata-bindinguwpxbind

解决方案


正如提到的错误消息,您的问题的原因是您正在使用Static修饰符作为绑定源属性 - Vars.DateStr。您只需要删除该属性的Static修饰符。Vars.DateStr

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

推荐阅读