Android MvvmCross — привязка к статической константе

Работая над приложением для Android, используя MvvmCross с общей основной библиотекой, мне было интересно, есть ли возможность привязать статические константы, которые находятся за пределами модели представления, к свойству в представлении. Например, привяжите цвет фона панели вкладок к полю TabBar в классе Colors.

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

Если это невозможно, есть ли передовой опыт, который я могу принять во внимание?


person Dennis Schiepers    schedule 02.06.2020    source источник


Ответы (1)


Хотя вы не можете делать именно то, что хотите, есть несколько других подходов, которые вы можете использовать. Самый простой способ — сохранить ссылку на цвет в свойстве вашей 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 на что-то другое, и пользовательский интерфейс должен обновить цвет.

person Matt Jones    schedule 11.06.2020