2014-01-14 33 views
0

我在我的android視圖中有三個MvxSpinners。 這些紡紗器綁定到三個不同的列表。 和數據綁定模式是雙向的這些spinners.i.e。當此視圖顯示爲 時,所有這三個旋鈕都會顯示預定義的值。Mvvmcross中的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. 

我該如何做到這一點?

回答

1

有許多方法可以實現這一點,代碼放置真的取決於您。總的來說,這個想法應該是有一個「SelectedItem」對象,你可以將它傳遞給你的方法,並且加載下一個List。

請記住,此代碼是更傳統的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重置爲null。 SelectedItem在ViewModel中更改,但不在微調器中。在這種情況下,有解決方案的數量,但我使用的消息通知查看設置選中的項目

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