我有一个MVX感知活动,该活动具有类型的视图模型AViewModel
。AViewModel
具有类型的属性BViewModel
。的AView
创建创建在代码的子视图的外部函数。子视图可能如下所示:
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();
当我运行代码时,视图将正确显示,但是绑定不起作用。什么也没发生,而且我看不到任何有帮助的日志消息。
有人知道我在这里做错了吗?
编辑:现在,我感到愚蠢。我的代码工作得很好。问题是我没有看到文本视图,因为默认情况下线性布局是水平的。因此文本视图不可见。好吧,也许这篇文章是很好的参考。
该代码有效,问题在于文本视图不可见。有关详细信息,请参见OP!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句