2017-07-18 14 views
0

私のViewModelにカスタムオブジェクトがあります。MVVMCrossデータバインディングが機能しません

public MyObject PropertyName 
{ 
    get { return _propertyName; } 
    set 
    { 
     _propertyName = value; 
     RaisePropertyChanged(() => PropertyName); 
    } 
} 

私のドロイドビューでTextviewにそのメンバーの1つだけをバインドしたいと思います。このリンクを見つけた: Bind data of custom object to TextView in MvvmCross そして私はこれとまったく同じようにやっています。ローカル:MvxBind =「テキストMyobject.ItsMember」

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

は、ケーシングなどをチェックしかし、結合が動作していないと私は、デバッグウィンドウでそれを印刷することができますが、私は、画面に表示される文字列の値を見ることはできません。 私が間違っているかもしれない手掛かりはありますか?

+0

このビューはどこで膨らませますか? – Cheesebaron

+0

[アクティビティー(LABEL = "MYVIEW")] パブリッククラスMYVIEW:MvxActivity {保護オーバーライドボイドOnViewModelSet() \t \t { SetContentView(Resource.Layout.MyView)。 \t \t } – Vivek

+0

そして、「Myobject」はViewModelのプロパティの名前ですか? – Cheesebaron

答えて

0

私の最後に問題を再現することはできません。

私が試してみた:

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

を次にMyViewModelは、私が使用してバインドDataContextのであることを考える:

​​

だけで正常に動作します。

0

タイプにバインドすることはできません。型のインスタンスにバインドする必要があります。あなたはそれはあなたがこの配置はMyObject.ItsMemberは、文字列プロパティの値に解決できるようになります

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

ようなものが必要AXMLに設定されているように動作するように結合するためのために。あなたのプロパティが文字列値でない場合、あなたは全体のnotherの主題であるコンバータを実装する必要があります。

関連する問題