首页 > 解决方案 > Android MvvmCross - 绑定到静态常量

问题描述

在使用 MvvmCross 和共享核心库的 Android 应用程序上工作时,我想知道是否有可能将位于视图模型外部的静态常量绑定到视图中的属性。例如,将标签栏的背景颜色绑定到 Colors 类中的 TabBar 字段。

public static class Colors
{
    public static readonly MvxColor MainGray = new MvxColor(0xff2D3030);
    public static MvxColor TabBar => MainGray;
}

如果这不可能,是否有任何我可以考虑的最佳实践?

标签: androidxamarinmvvmcross

解决方案


虽然您不能完全按照您的意愿行事,但您可以采取其他一些不同的方法。最简单的方法是将对颜色的引用存储在 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 应该更新颜色。


推荐阅读