Xamarin Android Spinner(MvxSpinner)与语言资源和选择项绑定

时间:2017-06-02 08:23:49

标签: c# mvvm xamarin.android spinner mvvmcross

我现在有一个针对Android的Spinner(MvxSpinner)的问题(但后来我也需要它用于iOS)。我有旋转周期过滤器像本周,上周,本月等。这个过滤器我需要为我的api服务获取数据...我的问题是我想要使用期间类型的枚举(或者mb一些更好的解决方案) ?)这样的事情:

枚举期间类型:

public enum PeriodTypes
    {
        Unknown = -1,
        LastSevenDays = 0,
        LastWeek = 1,
        ThisWeek = 2
    }

我可以创建枚举列表这些PeriodTypes,但我的问题是我需要在Spinner字符串中使用语言资源但在SelectedPeriod我需要知道它的PeriodTypes.LastWeek并使用它从api服务获取数据而不是像现在只是语言资源中的字符串......

我的问题是,如果我可以使用某些对象,例如带有语言resoruce的字符串文本,我会在Spinner中显示,在这个对象中我需要有Enum或Enum类型的Id,在SelectedPeriod中我会知道是什么被选中....一些提示如何制作?

我现在的ViewModel实现是:

public void Init(Shop shop)
        {
            _shop = shop;
            _shopName = shop.Name;
            InitializePeriodList();
            InitializeDailySales();
        }

        private void InitializePeriodList()
        {
            _periodList = new List<string>();

            _periodList.Add(CoreResources.Instance.LocalizedString(Constants.Periods, "LastSevenDays"));
            _periodList.Add(CoreResources.Instance.LocalizedString(Constants.Periods, "ThisWeek"));
            _periodList.Add(CoreResources.Instance.LocalizedString(Constants.Periods, "LastWeek"));

            string first = null;
            foreach (var s in _periodList)
            {
                first = s;
                break;
            }
            _selectedPeriod = first != null ? _periodList.FirstOrDefault() : CoreResources.Instance.LocalizedString(Constants.InfoMessages, "Error");
        }


   private List<string> _periodList;
        public List<string> PeriodList
        {
            get { return _periodList; }
            set
            {
                _periodList = value;
                RaisePropertyChanged(() => PeriodList);
            }
        }

        private string _selectedPeriod;
        public string SelectedPeriod
        {
            get { return _selectedPeriod; }
            set
            {
                _selectedPeriod = value;
        InitializeDailySales();
                RaisePropertyChanged(() => SelectedPeriod);
            }
        }

布局实施:

 <MvxSpinner

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/periodSpinner"

        local:MvxBind="ItemsSource PeriodList; SelectedItem SelectedPeriod"

        android:spinnerMode="dropdown" />

1 个答案:

答案 0 :(得分:0)

嗯我有一个想法..我可以创建一个方法,它将返回Period of Periods,其中Period将是LocalizedString和PeriodType的对象。在ViewModel中我将有这个TempList,对于Spinner,我将使用TempList中的LocalizedString创建字符串List,当我在Spinner中选择一些时,我会找到item = TempList.Where(q =&gt; q.LocalizedString.Equals(_selectedPeriod) )我将有item.PeriodType ....