【问题标题】:MvvmCross Android binding in code代码中的 MvvmCross Android 绑定
【发布时间】:2016-03-13 09:47:41
【问题描述】:

我有一个 MVX 感知活动,它的视图模型类型为 AViewModelAViewModel 具有 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();

当我运行代码时,视图会正确显示,但绑定不起作用。什么都没有发生,我没有看到任何有用的日志消息。

有人知道我在这里做错了什么吗?

编辑:现在,我觉得自己很愚蠢。我的代码运行良好。问题是我没有看到文本视图,因为默认情况下线性布局是水平的。所以文本视图是看不见的。嗯,也许这篇文章值得参考。

【问题讨论】:

  • 能否请您回答您自己的问题并将其标记为已回答?

标签: android data-binding xamarin mvvmcross


【解决方案1】:

代码有效,问题是文本视图不在视图中。详情见OP!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多