2017-07-18 1 views
0

J'ai un objet personnalisé dans mon ViewModel. Je veux lier un seul de ses membres à la vue texte dans ma vue droid. Trouvé ce lien: Bind data of custom object to TextView in MvvmCross Et je fais exactement comme ça. locale: MvxBind = « Texte Myobject.ItsMember »La liaison de données MVVMCross ne fonctionne pas

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <RelativeLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true" 
        android:text="LabelCaption" /> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:textColor="@android:color/white" 
        local:MvxBind="Text Myobject.ItsMember" /> 
      </RelativeLayout> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

Contrôlé le boîtier, etc., mais la liaison ne fonctionne pas et je ne peux pas voir la valeur de chaîne apparaissant à l'écran pendant que je peux l'imprimer dans la fenêtre de débogage. Des indices où je peux me tromper?

+0

Où gonflez-vous cette vue? – Cheesebaron

+0

[Activité (label = "MyView")] public class MyView: MvxActivity { protected override vide OnViewModelSet() \t \t { setContentView (Resource.Layout.MyView); \t \t} } – Vivek

+0

Et 'Myobject' est le nom de la propriété dans votre ViewModel? – Cheesebaron

Répondre

0

Je ne peux pas reproduire votre problème de mon côté.

J'ai essayé avec:

public class MyViewModel : MvxViewModel 
{ 
    private MyModel _model; // this is a class member variable or class member field 
    public MyModel Model // this is a class member property 
    { 
     get => _model; 
     set => SetProperty(ref _model, value); 
    } 

    public MyViewModel() 
    { 
     Model = new MyModel { Name = "Herp" }; 
    } 
} 

public class MyModel : MvxNotifyPropertyChanged 
{ 
    private string _name; 
    public string Name 
    { 
     get => _name; 
     set => SetProperty(ref _name, value); 
    } 
} 

Ensuite, étant donné que MyViewModel est DataContext Je lie l'aide:

local:MvxBind="Text Model.Name" 

fonctionne très bien.

0

Vous ne pouvez pas lier à un type. Vous devez vous lier à une instance du type. Pour la liaison à travailler comme vous l'avez mis dans le AXML dont vous avez besoin quelque chose comme

public class MyType 
{ 
    private string _ItsMember; 
    public string ItsMember 
    { 
     get 
     { 
      return _ItsMember; 
     } 
     set 
     { 
      _ItsMember = value; 
      RaisePropertyChanged (()=>ItsMember); 
     } 
    } 
} 

private MyType _MyObject; 
public MyType MyObject 
{ 
    get 
    { 
     return _MyObject; 
    } 
    set 
    { 
     _MyObject = value; 
     RaisePropertyChanged(()=>MyObject); 
    } 
} 

Cet arrangement permettra de résoudre MyObject.ItsMember à une valeur de propriété de chaîne. Si votre propriété n'est pas une valeur de chaîne, vous devrez implémenter un convertisseur qui est un sujet entier.