2017-06-16 2 views
0

Je construis un projet android natif avec Xamarin et MVVMCross. J'utilise un Mvx.MvxSpinner en tant qu'élément pour charger mes données dans (Ceci est la façon MVVMCross).Xamarin, MVVMCross show DisplayMemberPath à la place

J'ai le problème suivant: J'ai une classe avec différents éléments de données et un spinner où je lie un new List<DataClass>() avec des éléments. est-il un moyen de lier effectivement à la propriété Nom dans le DataClass (comme DisplayMemberPath dans WPF)

DataClass:

public class DataClass 
{ 
    public string Name { get; set; } 
} 

ViewModel:

public ObservableCollection<DataClass> Lines 
{ 
    get => GetPropertyValue<ObservableCollection<DataClass>>(); 
    set => SetPropertyValue(value); 
} 

Vue:

<Mvx.MvxSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource Lines; SelectedItem SelectedLine" /> 
+0

Je pourrais aussi utiliser un adaptateur si cela est impossible. – kevingoos

+0

Que se passe-t-il si vous modifiez 'SelectedLine' en' SelectedLine.Name' dans votre liaison XML? –

Répondre

3

Def Approcher l'approche

Par défaut, MvvmCross appellera simplement le ToString de votre modèle. Donc, vous pouvez simplement remplacer le ToString pour renvoyer le nom.

public class DataClass 
{ 
    public string Name { get; set; } 

    public override string ToString() => Name; 
} 

Approche modèle

Si vous voulez plus de contrôle sur l'apparence ainsi que la liaison que vous pouvez créer un modèle XML personnalisé.

<Mvx.MvxSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource Lines; SelectedItem SelectedLine" 
    local:MvxDropDownItemTemplate="@layout/item_template_dropdown" 
    local:MvxItemTemplate="@layout/item_template_spinner" /> 

MvxItemTemplate est l'utilisation de gabarit lorsque la commande est dans un état de repos à (par défaut). Alors que MvxDropDownItemTemplate est l'utilisation de modèle lorsque le spinner est dans l'état de sélection.

exemple Item template

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res/Project.Ui.Droid" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     local:MvxBind="Text Name" /> 
</FrameLayout>