2013-08-27 47 views
2

的屬性我有以下代碼:MvxPickerViewModel綁定到對象

var pickerViewModel = new MvxPickerViewModel(this.mandantenPicker); 
this.mandantenPicker.Model = pickerViewModel; 
this.mandantenPicker.ShowSelectionIndicator = true; 
mandantenAuswahlTextfield.InputView = this.mandantenPicker; 

var set = this.CreateBindingSet<LoginView, LoginViewModel>(); 

set.Bind(pickerViewModel).For(p => p.SelectedItem).To(vm => vm.SelectedMandant); 
set.Bind(pickerViewModel).For(p => p.ItemsSource).To(vm => vm.Mandanten); 

set.Apply(); 

在PickerView我沒有預期值。它的顯示對象的命名空間。

我綁定到「Mandants」列表,Mandant有FirstName/LastName。如何設置了「被顯示爲」值?

所以是這樣的:從https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxPickerViewModel.cs

public override string GetTitle(UIPickerView picker, int row, int component) 
    { 
     return _itemsSource == null ? "-" : RowTitle(row, _itemsSource.ElementAt(row)); 
    } 

    protected virtual string RowTitle(int row, object item) 
    { 
     return item.ToString(); 
    } 

如果您想自定義顯示的字符串,您:

set.Bind(pickerViewModel).For(p => p.ItemsSource).To(vm => vm.Mandanten)["FirstName"]; //stupid example but to show better what I mean/want 

回答

5

的MvxPickerViewModel目前使用GetTitle()制定出什麼顯示器可以:

  • 從MvxPickerViewModel繼承並提供RowTitle一個覆蓋:在您的Mandant對象

    protected override string RowTitle(int row, object item) 
    { 
        return ((Mandant)item).FirstName; 
    } 
    
  • 或覆蓋ToString

  • 或提供和使用來自IEnumerable<Mandant>一些ValueConverters到IEnumerable<WrappedMandant>MandantWrappedMandant哪裏WrappedMandant提供您想要使用的ToString()實現:

    public class WrappedMandant 
        { 
         public Mandant Mandant { get;set;} 
         public override string ToString() 
         { 
          return Mandant.FirstName; 
         } 
        } 
    

如果您想自定義選擇器細胞進一步顯示出來,那麼你也可以覆蓋GetView併爲每個Mandant

自定義單元格