2017-04-26 21 views
0

私はAndroidアプリケーションでMvvmCrossを使用しています。私はMvxLinearLayoutから派生私のカスタムビューのデータコンテキストに2サブのviewmodelsをバインドしたい、私のXMLでバインドViewModelからDataContextを表示

public class GlobalViewModel : MvxViewModel 
{ 
    private SubViewModel1 _subViewModel1; 
    public SubViewModel1 SubViewModel1 
    { 
     get { return _subViewModel1; } 
     set { _subViewModel = value; RaisePropertyChanged(() => SubViewModel); } 
    } 

    private SubViewModel2 _subViewModel2; 
    public SubViewModel2 SubViewModel 
    { 
     get { return _subViewModel2; } 
     set { _subViewModel2 = value; RaisePropertyChanged(() => SubViewModel); } 
    } 
} 

:私は2サブのviewmodels(両方ともMvxViewModelから派生)と1つのグローバルのViewModelを持って

<?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-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <MyMvxLinearLayout1 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     local:MvxBind="SubViewModel1" /> 
    <MyMvxLinearLayout2 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/transparent" 
     android:gravity="center" 
     local:MvxBind="SubViewModel2" /> 
</FrameLayout> 

しかし、MyMvxLinearLayout1MyMvxLinearLayout2の中の結合は機能しません。私は行方不明のものがありますか?

+1

は 'カスタム行いませMvxLinearLayout'あなたのサブViewModelsをバインドしたいプロパティを公開しますか?あなたのコントロール内にViewModelを保持するためのプロパティが必要です。 – Plac3Hold3r

+0

これは実際に私がやろうとしていることではありません。私はビューのデータコンテキストにバインドしようとしています。 WPFとWindow Phoneでは、これは 'DataContext'プロパティにバインドして行います。 – Darius

答えて

1

いくつかの調査をした後、私はそれを理解しました。コンストラクタで

private readonly IMvxAndroidBindingContext _bindingContext; 

[MvxSetToNullAfterBinding] 
public object DataContext 
{ 
    get { return _bindingContext.DataContext; } 
    set 
    { 
     _bindingContext.DataContext = value; 
    } 
} 

そして:私のカスタムビューでは、私は、これらのフィールド/プロパティを追加

_bindingContext = new MvxAndroidBindingContext(context, (IMvxLayoutInflaterHolder)context); 
var myView = _bindingContext.BindingInflate(Resource.Layout.my_view, null, true); // myView will now have all the proper binding setup, just add it to your layout now 

および.xmlで:

<MyMvxLinearLayout1 
android:layout_width="match_parent" 
android:layout_height="match_parent"  
local:MvxBind="DataContext SubViewModel1" /> 
関連する問題