Android MvvmCross - 绑定到静态常量

Android MvvmCross - Bind to static constant

使用带有共享核心库的 MvvmCross 开发 Android 应用程序,我想知道是否有可能将位于视图模型外部的静态常量绑定到 属性看法。例如将标签栏的背景颜色绑定到 Colors class.

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

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

虽然您无法完全按照自己的意愿行事,但您可以采用其他几种不同的方法。最简单的方法是在 ViewModel 的 属性 中存储对颜色的引用。所以你可以这样做:

public MvxColor BackgroundColor => Colors.MainGray;

然后您可以自由地将任何颜色绑定到我刚刚创建的 属性。

另一个选项是让你的颜色 class 实例化而不是静态的。然后,您可以将 class 的实例存储在 ViewModel 的 属性 中并绑定到其属性。例如,如果您有:

public ViewModel()
{
    CoreColors = new Colors();
}

public Colors CoreColors;

然后您可以将 BackgroundColor 绑定到 CoreColors.MainGray

还有很多其他方法可以做到这一点,但对于您当前的设置,这些方法中的任何一种都可以正常工作!然而,值得记住的是,如果您想更新颜色并让它更新绑定,您需要确保 属性 上有一些东西通知绑定它需要更新。如果你采用我的第二个例子,这就是我如何设置你的颜色 class 来支持这个:

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 应该更新颜色。