2015-12-08 55 views
2

我有一個MVX感知的活動,它有一個AViewModel類型的視圖模型。 AViewModel有財產BViewModelAView創建一個外部函數,該代碼中創建一個子視圖。子視圖可能看起來像這樣:MvvmCross代碼中的Android綁定

var editText = new EditText(context); 
editText.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 
editText.TextSize = 40f; 

var textView = new TextView(context); 
textView.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); 
textView.TextSize = 40f; 

var linearLayout = new LinearLayout(context); 
linearLayout.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent); 

linearLayout.AddView(editText); 
linearLayout.AddView(textView); 

linearLayout然後加入AView。當我運行它時,視圖顯示正確。 現在我需要添加綁定到它。

創建子視圖的外部代碼只知道BViewModel。它有沒有線索約AViewModel,所以我試圖創建一個新的結合上下文和所有者

class BindingContextOwner : IMvxBindingContextOwner 
{ 
    public BindingContextOwner(IMvxBindingContext bindingContext) 
    { 
     this.BindingContext = bindingContext; 
    } 

    public IMvxBindingContext BindingContext { get; set; } 
} 

var contentContext = new MvxAndroidBindingContext(this, this); 
contentContext.DataContext = this.ViewModel.BViewModel; 

var contentBindingOwner = new BindingContextOwner(contentContext); 

其中this是我的MVX可以檢測活動。然後我通過contentBindingOwner到我的外部代碼,並嘗試做結合

var set = bindingOwner.CreateBindingSet<IMvxBindingContextOwner, BViewModel>(); 
set.Bind(editText).For(v => v.Text).To(vm => vm.Foo).TwoWay(); 
set.Bind(textView).For(v => v.Text).To(vm => vm.Foo) 
set.Apply(); 

當我運行的代碼中,視圖獲取正確顯示,但結合不起作用。什麼都沒有發生,我看不到任何可以幫助的日誌消息。

有人知道我在做什麼錯在這裏?

編輯:現在,我感到很蠢。我的代碼工作得很好。問題是我沒有看到文本視圖,因爲線性佈局默認是水平的。所以文本視圖不可見。那麼,也許這個帖子是很好的參考。

+1

您能否回答您自己的問題並將其標記爲已回答? – Cheesebaron

回答

0

該代碼有效,問題在於文本視圖不在視圖中。詳情請參閱OP。