You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP x:Bind绑定Application.Current提示找不到Application属性如何解决

问题根因

你遇到的两类报错核心原因如下:

  • XAML绑定报错:x:Bind的默认上下文是当前页面的后台类(即MainPage),直接写{x:Bind Application.Current}会默认查找MainPage下的Application属性,自然不存在。
  • CS1061报错:Application.Current返回的是Windows.UI.Xaml.Application基类实例,你自定义的IsSignedIn是在子类App中定义的,基类没有该属性,直接调用肯定报错。

解决方案

方案1:直接绑定App实例(最简修改,无需额外ViewModel)

  1. 先在App.xaml中注册布尔转可见性的转换器,XAML中bool类型无法直接赋值给Visibility属性,需要转换器中转:
<Application.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
</Application.Resources>
  1. 在MainPage.xaml头部声明App类所在的命名空间,示例如下(替换成你自己的App类命名空间即可):
xmlns:local="using:MSGraphAPIDemo"
  1. 修改StackPanel的绑定逻辑:
<StackPanel Visibility="{Binding Path=IsSignedIn, Source={x:Static local:App.Current}, Converter={StaticResource BoolToVisConverter}}">
    <!-- 内部按钮代码保持不变 -->
</StackPanel>

该方案直接绑定你自定义的App类全局实例,你已经在App类中实现了INotifyPropertyChanged,IsSignedIn变化时会自动通知界面更新。


方案2:配合你已创建的MainPageViewModel使用

你当前的ViewModel存在两个问题:没有实现属性变更通知、只在构造函数赋值一次无法同步后续状态,修改后代码如下:

using System.ComponentModel;
using System.Runtime.CompilerServices;
using Windows.UI.Xaml;

namespace MSGraphAPIDemo.Model
{
    public class MainPageViewModel : INotifyPropertyChanged
    {
        // 直接绑定App实例的IsSignedIn,避免重复存值
        public bool SignedIn => ((App)Application.Current).IsSignedIn;

        public MainPageViewModel()
        {
            // 订阅App的属性变更通知,同步更新登录状态
            ((App)Application.Current).PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(App.IsSignedIn))
                {
                    OnPropertyChanged(nameof(SignedIn));
                }
            };
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

之后在MainPage.xaml.cs的构造函数中设置数据上下文:

public MainPage()
{
    this.InitializeComponent();
    this.DataContext = new MainPageViewModel();
}

最后修改MainPage.xaml的绑定逻辑(同样需要先加方案1中提到的转换器):

<StackPanel Visibility="{Binding SignedIn, Converter={StaticResource BoolToVisConverter}}">
    <!-- 内部按钮代码保持不变 -->
</StackPanel>

内容的提问来源于stack exchange,提问作者dot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:03