2017-04-26 102 views
0

我在我的Android应用程序上使用MvvmCross。我有1个与2周的ViewModels(从MvxViewModel都获得)的全球视图模型:将ViewModel绑定到View 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); } 
    } 
} 

在我的XML,我想在第2周个子的ViewModels绑定到的从MvxLinearLayout得到我的自定义视图中的数据方面:

<?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'公开一个属性,你想要绑定你的子视图模型?您将需要一个属性来控制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" /> 
相关问题