如何访问 Windows 通用应用程序中的 App.Current 属性

How to access App.Current properties in Windows Universal Apps

我正在尝试绑定到我的视图中的 App.Current.XYZ 属性,但这似乎不可能,这是我所拥有的示例:

sealed partial class App : Application
{
    public MyClassType MyClass { get; private set; }

    ...

这是视图:

<Page ... 
    DataContext="{Binding MyClass, Source={x:Static Application.Current}}">

所以,这是不可能的,因为 Windows Universal(或 WinRT)不再支持 x:Static,所以我尝试通过 [=] 公开应用程序 属性 34=] 在 代码隐藏 中,像这样:

public MyClassType MyClass
{
    get
    {
        return Application.Current.MyClass;
    }
}

这也不行! MyClass 没有智能感知,完全没有。我也试过 App.Current 但还是不行。

知道为什么我的 属性 无法通过 Application.Current. 看到吗?或者如果有什么方法可以直接通过 XAML?

绑定到这个 属性

以下内容可能对您有用:

创建两个 classes:

public class MyDataProvider
{
    private static readonly MyDataContainer _myDataContainer = new MyDataContainer();

    public MyDataContainer MyDataContainer { get { return _myDataContainer; } }
}

public class MyDataContainer
{
    public MyClassType MyClass { get; private set; }

    ...
}

然后在App.xaml定义这个静态资源:

<resources:MyDataProvider x:Key="MyDataProvider"/>

现在您应该可以在 XAML 代码中像这样使用数据绑定了:

Attribute="{Binding MyDataContainer.MyClass, Source={StaticResource MyDataProvider}}"

在您的情况下,您可以调整代码,使 MyDataContainer 实际上是您的应用程序:

public class MyDataProvider
{
    public Application App { get { return Application.Current; } }
}

并像这样编写数据绑定:

Attribute="{Binding App.MyClass, Source={StaticResource MyDataProvider}}"

但一般来说,我不会使用 App class 作为数据绑定源的提供者。为了分离关注点,我会使用类似上面的 MyDataProvider 和 MyDataContainer

您需要像这样将 Application.Current 转换为您的类型:

public MyClassType MyClass
{
    get
    {
        return ((App)Application.Current).MyClass;
    }
}