Android MvvmCross-绑定到静态常量

Android MvvmCross-绑定到静态常量,android,xamarin,mvvmcross,Android,Xamarin,Mvvmcross,在使用MvvmCross和共享核心库开发Android应用程序时,我想知道是否有可能将位于viewmodel外部的静态常量绑定到视图中的属性。例如,将tabbar的背景色绑定到Colors类中的tabbar字段 public static class Colors { public static readonly MvxColor MainGray = new MvxColor(0xff2D3030); public static MvxColor TabBar => Ma

在使用MvvmCross和共享核心库开发Android应用程序时,我想知道是否有可能将位于viewmodel外部的静态常量绑定到视图中的属性。例如,将tabbar的背景色绑定到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;
然后你可以自由地将任何颜色绑定到我刚刚创建的属性上

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

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

public Colors CoreColors;
然后可以将背景色绑定到CoreColors.MainGray

有很多其他方法可以做到这一点,但在您当前的设置中,这两种方法都可以很好地工作!但是值得注意的是,如果您想更新颜色并让它更新绑定,则需要确保属性上有某些内容通知绑定需要更新。如果您接受我的第二个示例,我将通过以下方式设置您的颜色类来支持这一点:

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将是灰色的,直到您将TabBar颜色设置为其他颜色,UI应该更新颜色