2014-01-14 2 views
0

У меня есть три MvxSpinners в моем андроидном представлении. Эти прядильщики привязаны к трем различным спискам. и Режим привязки данных - это TwoWay для этих spinners.i.e. когда отображается это представление , все эти три прядильщика отображаются с предопределенными значениями.MvxSpinner в Mvvmcross

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. 

Как я могу это достичь?

ответ

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; 
0

У меня была такая же проблема, но только если добавить нулевое значение (в качестве значения по умолчанию) на ваш ItemsSource и попытаться сбросить SelectedItem к нулю. SelectedItem изменен в ViewModel, но не в spinner. В этом случае есть несколько решений, но я использовал сообщение, чтобы сообщить 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; } 
} 

в View

private void OnSpinnerSelectionChanged(SpinnerSelectionChanged obj) 
{ 
    switch (obj.SpinnerName) 
    { 
     case "City": 
      _spinnerCity.SetSelection(obj.Position); 
      break; 
     case "Office": 
      _spinnerOffice.SetSelection(obj.Position); 
      break; 
    } 
} 
Смежные вопросы