android - Android MvvmCross - 绑定到静态常量
问题描述
在使用 MvvmCross 和共享核心库的 Android 应用程序上工作时,我想知道是否有可能将位于视图模型外部的静态常量绑定到视图中的属性。例如,将标签栏的背景颜色绑定到 Colors 类中的 TabBar 字段。
public static class Colors
{
public static readonly MvxColor MainGray = new MvxColor(0xff2D3030);
public static MvxColor TabBar => MainGray;
}
如果这不可能,是否有任何我可以考虑的最佳实践?
解决方案
虽然您不能完全按照您的意愿行事,但您可以采取其他一些不同的方法。最简单的方法是将对颜色的引用存储在 ViewModel 的属性中。所以你可能会这样做:
public MvxColor BackgroundColor => Colors.MainGray;
然后,您可以自由地将任何颜色绑定到我刚刚创建的该属性。
另一种选择是使您的 Colors 类实例化而不是静态。然后,您可以将该类的实例存储在 ViewModel 的属性中并绑定到其属性。例如,如果您有:
public ViewModel()
{
CoreColors = new Colors();
}
public Colors CoreColors;
然后你可以将你的 BackgroundColor 绑定到 CoreColors.MainGray
有很多其他方法可以做到这一点,但是根据您当前的设置,这些方法中的任何一种都可以正常工作!然而,值得一提的是,如果你想更新颜色并让它更新绑定,你需要确保属性上有一些东西通知绑定它需要更新。如果您采用我的第二个示例,这就是我设置您的 Colors 类以支持这一点的方式:
public class Colors : MvxNotifyPropertyChanged
{
public static MvxColor MainGray => new MvxColor(0xff2D3030);
private MvxColor _tabBar = MainGray;
public MvxColor TabBar
{
get { return _tabBar; }
set { SetProperty(ref _tabBar, value); }
}
}
现在,如果您想绑定到 TabBar,TabBar 将是 MainGray,直到您将 TabBar 颜色设置为其他颜色,并且 UI 应该更新颜色。
推荐阅读
- javascript - electron/socket.io 客户端 - python-socketio/aiohttp 服务器 // 连接失败
- python-3.x - 相关Python读取文件
- javascript - 有没有办法在状态声明中包含条件?
- vue.js - 通过 Vue 渲染函数中的映射操作触发 Vuex 存储状态更改
- python - 如何修复“此 OID 中当前不存在此类实例”
- f# - 如何在同一个函数中编写泛型类型和鸭子类型?
- microsoft-translator - Azure 翻译文本 - 排除检测到的错误语言
- excel - 出现错误,无法设置范围类的 formulaArray 属性
- wordpress - 自定义帖子类型和自定义重写规则的 Wordpress 分页问题
- random - 为什么 MersenneTwister 似乎为同一个种子生成不同的序列?