无法在 XAML (Xamarin Forms) 中绑定静态属性

2023-12-09

我有一个静态类(Evp),它位于Models文件夹。它有一个Name字符串,带有 getter 和 setter 以及PropertyChangedEventHandler及其代码:

public static event PropertyChangedEventHandler StaticPropertyChanged;
private static string _name
public static string Name{
    get => _name;
    set{
        _name = value;
        OnStaticPropertyChanged("Name"); } }
private static void OnStaticPropertyChanged(string propertyName)
    {
        StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
    }

在我的 XAML 文件中,这就是我尝试绑定的方式(如果我没记错的话,它在 WPF 4.5 中有效):

<Label Grid.Row="0" Grid.Column="1" TextColor="Beige" Text="{Binding Source={x:Static Models:Evp.Name}}" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" FontSize="30"></Label>

我指定了Models文件夹中的ContentPage在 XAML 中:

xmlns:Models="clr-namespace:Rdb.Models;assembly=Rdb"

由于某种原因,它不起作用。我究竟做错了什么? 另外,如何在代码隐藏中设置此绑定?


为了支持数据绑定,您的类必须实现INotifyPropertyChanged界面。不幸的是,静态类无法实现接口,因此您的解决方案将不起作用。

解决方案是创建一个普通的类来实现INotifyPropertyChanged然后创建此类的单例实例,您将其注册为资源:

App.Current.Resources["Evp"] = new Evp();

然后你用它来引用它StaticResource标记扩展:

{Binding Name, Source={StaticResource Evp}}

确保该类是单例的public static仅获取属性:

public static Evp Instance {get;} = new Evp();

然后你还可以添加一个private构造函数以确保其他人无法创建您的类的实例:

private Evp()
{
}

然后资源将被设置为:

App.Current.Resources["Evp"] = Evp.Instance;

这使得在 C# 代码中使用你的类变得更容易,只需使用Evp.Instance.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 XAML (Xamarin Forms) 中绑定静态属性 的相关文章

随机推荐

  • 修改表中的列

    我有下表test iD Name ParentId GroupID 1 1 Null 2 1 Null 3 1 Null 4 7 Null 5 7 Null 6 7 Null 7 9 Null 我怎样才能修改它来获取列GroupID像这样
  • JQUERY ajax 将值从 MVC 视图传递到控制器

    我想要的是将 txt Comments 的值从视图 使用 jquery ajax 传递到控制器 问题是 ajax jquery 不接受脚本标签作为字符串 意思是 当我在 txtComments 中输入任何 script html 标签时 a
  • LINQ Any 与 FirstOrDefault 的性能 != null

    我贡献的开源项目 OSP 代码中有多个地方必须确定集合中的元素是否满足特定条件 我见过LINQ表达式的使用Any lambda expression 在某些情况下和FirstOrDefault lambda expression null在
  • Ionic 隐藏导航栏而不是按钮

    我正在尝试寻找一种可能的方法来隐藏离子ion nav bar不隐藏ion nav barbuttons 我努力了 hide nav bar true 但它也隐藏了按钮 我已经搜索过并且也参考过this 但没有解决我的问题 问候 你只需要指定
  • 用于编辑源代码的 Docker 安装卷

    我的 Windows 系统上有 docker 设置 该应用程序的源代码位于C Application source地点 我希望这些信息在 docker 容器中可用 以便在开发过程中轻松更改代码 而无需重建映像 这就是我尝试过的 docker
  • 玩笑测试为 eventemitter 对象发出事件(express)

    试图从中获得灵感玩笑测试为 eventemitter 对象发出事件 http 没有解决我的痛苦express 假设有以下nodejs代码 server js const express require express const app e
  • 迁移到 Firebase Cloud Messaging:导入现有 Google 项目会对项目产生什么影响?

    In 设置 FCM它说 如果没有 请在 Firebase 控制台中创建一个 Firebase 项目 已经有一个了 如果您已经有一个现有的 Google 项目 与您的移动应用程序关联 单击导入 Google 项目 否则 单击 创建新项目 我有
  • 如何在 Spring Security 登录表单中进行额外验证?

    我想知道如何在 Spring Security 处理登录表单之前对其进行额外的验证 我正在考虑一些 LoginController LoginForm bean 但我不知道如何将它们组合在一起 如何配置它来工作 下面是我的 愿景 我搜索了一
  • 错误:rails 中的“不兼容的库版本”sqlite3-1.3.11

    我在 Ubuntu 系统 16 04 上工作 我的问题是每当我设置任何 Rails 项目并尝试运行rails s然后我收到 sqlite3 的 库版本不兼容 错误 如下所示 home jiggs rvm gems ruby 2 3 1 al
  • 字节中的位数是否等于 char 类型中的位数?

    C 标准有强制要求吗 是否存在一个字节中的位数不等于类型中的位数的平台char Yes Both are equal to CHAR BIT C标准定义CHAR BIT as 不是位字段 字节 的最小对象的位数 c99 明确表示 一个字节包
  • 如何获取Windows中当前交互式用户会话的数量?

    我正在编写一个 Windows 服务 它需要知道当前是否有任何用户登录在计算机上 到目前为止我已经尝试过Win32 LogonSession WMI 以及LsaEnumerateLogonSessions LsaGetLogonSessio
  • 在Python中通过strptime解析不带前导零的小时

    假设您有以下格式的时间 a 800 0 830 0 900 0 930 0 1000 0 1030 0 问题是缺少小时的前导零 例如00 30表示为30 08 00表示为800 and 00 00表示为2400 是否可以将此数据解析为tim
  • 如何计算并仅打印重复项?

    我知道如何遍历整个数组 但我只需要重复出现的次数 我处于初学者水平 所以只是循环和数组的基本使用 int array 12 23 22 0 43 545 4 55 43 12 0 999 87 for int i 0 i lt array
  • 了解LDR和STR吗?

    我正在使用 ARMSim 我猜它是一个 ARM 模拟器 并且我有这个演示程序 它基本上读取一个文本文件并打印文本文件中的整数 仅第一行 Start Open file for input LDR R0 InputFileName MOV R
  • 显示“android-feedback.com”库的对话框

    我正在按照这里给出的教程进行操作http www android feedback com library用于发送反馈 但我无法显示对话框onOptionsItemSelected Override public boolean onCre
  • 获取 Google Apps 脚本来授权 Fusion Table API

    我正在构建一个数据库 希望将其托管在 Fusion Table 中 并且正在开发一些用于与 Fusion API 交互的测试函数 我正在使用 Google Apps 脚本 并且严重依赖此代码的其他来源 我花了一天的大部分时间研究这个问题 但
  • C# 字节[]加密

    我有一个 Byte 字段 它是我需要加密的文件内容 没有什么特别或奇特的 只是足以确保下一个得到它的人不费吹灰之力就无法轻松解码它 我会使用 Net Framework 4 0 附带的加密 但我绝对不需要使文件比实际更大 我想过只是简单地反
  • 如何在 Windows Phone 8 中以编程方式锁定屏幕?

    我们可以使用下面的代码来防止屏幕锁定 PhoneApplicationService Current ApplicationIdleMode IdleDetectionMode Disabled and PhoneApplicationSe
  • Android 中 Tab 更改时更改菜单

    我的应用程序中有两个选项卡 我希望菜单根据选项卡进行更改 这是我所做的 TabHost tabHost tabHost getTabHost TabSpec photospec tabHost newTabSpec Photos photo
  • 无法在 XAML (Xamarin Forms) 中绑定静态属性

    我有一个静态类 Evp 它位于Models文件夹 它有一个Name字符串 带有 getter 和 setter 以及PropertyChangedEventHandler及其代码 public static event PropertyCh