【问题标题】:MvxSpinner in MvvmcrossMvvmcross 中的 MvxSpinner
【发布时间】:2016-03-25 00:46:40
【问题描述】:

我的 android 视图中有三个 MvxSpinner。 这些微调器绑定到三个不同的列表。 这些微调器的数据绑定模式是双向的。即当这个视图是 显示时,所有这三个微调器都以预定义的值显示。

When user change the value in first spinner,then second spinner will be clear and  
get loaded with new values based on the selected value in first spinner.

我怎样才能做到这一点?

【问题讨论】:

    标签: mvvmcross


    【解决方案1】:

    有很多方法可以实现这一点,代码位置完全取决于您。总体而言,这个想法是拥有一个“SelectedItem”对象,您可以将其传递到您的方法中并“加载”下一个列表。

    请记住,此代码是更传统的 MVVM,但可以轻松转换为 MVVMCross 等效代码。我相信所有这些类型都应该得到 MVVMCross 的支持。

            private MyFirstObject _selectedFirstObject;
    
            public MyFirstObject SelectedFirstObject
            {
                get { return _selectedFirstObject; }
                set
                {
                    _selectedFirstObject = value;
                    RaisePropertyChanged("SelectedFirstObject");
                    if(value != null)
                    LoadMySecondObjects(value);
                }
    
            }
    
            private ObservableCollection<MyFirstObject> _myFirstObjects;
    
            public ObservableCollection<MyFirstObject> MyFirstObjects
            {
                get { return _myFirstObjects; }
                set
                {
                    _myFirstObjects = value;
                    RaisePropertyChanged("MyFirstObjects");
                }
            }
    
            private ObservableCollection<MySecondObject> _mySecondObjects;
    
            public ObservableCollection<MySecondObject> MySecondObjects
            {
                get { return _mySecondObjects; }
                set
                {
                    _mySecondObjects = value;
                    RaisePropertyChanged("MySecondObjects");
                }
            }
    
            public void LoadMySecondObjects(MyFirstObject current)
            {
               //Wherever you're pulling data from
               MySecondObjects = MyDataService.GetAll(current);
            }
    
            protected void RaisePropertyChanged(string propertyName)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但前提是您将 null 值(作为默认值)添加到 ItemsSource 并尝试将 SelectedItem 重置为 null。 SelectedItem 在 ViewModel 中更改,但在微调器中未更改。在那种情况下,有很多解决方案,但我使用消息通知 View 设置所选项目

      public class SpinnerSelectionChanged : MvxMessage
      {
          public SpinnerSelectionChanged(object sender, string spinnerName, int position): base(sender)
          {
              SpinnerName = spinnerName;
              Position = position;
          }
      
          public string SpinnerName { get; set; }
          public int Position { get; set; }
      }
      

      在视图中

      private void OnSpinnerSelectionChanged(SpinnerSelectionChanged obj)
      {
          switch (obj.SpinnerName)
          {
              case "City":
                  _spinnerCity.SetSelection(obj.Position);
                  break;
              case "Office":
                  _spinnerOffice.SetSelection(obj.Position);
                  break;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多