2
我有一個MVX感知的活動,它有一個AViewModel
類型的視圖模型。 AViewModel
有財產BViewModel
。 AView
創建一個外部函數,該代碼中創建一個子視圖。子視圖可能看起來像這樣: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();
當我運行的代碼中,視圖獲取正確顯示,但結合不起作用。什麼都沒有發生,我看不到任何可以幫助的日誌消息。
有人知道我在做什麼錯在這裏?
編輯:現在,我感到很蠢。我的代碼工作得很好。問題是我沒有看到文本視圖,因爲線性佈局默認是水平的。所以文本視圖不可見。那麼,也許這個帖子是很好的參考。
您能否回答您自己的問題並將其標記爲已回答? – Cheesebaron