在MvxListView中绑定RadioGroup

时间:2013-09-15 12:36:37

标签: android xamarin mvvmcross radio-group

我有一些非常棘手的问题。我已经尝试搜索网络甚至查看了MvvmCross资源,但我似乎无法弄明白。

我有一个带自定义适配器的MvxListView。原因是,根据当前ListItem的“DataContext”,我想显示一些不同的视图。

列表本身代表了某种问卷。所以列表中的项目是

的形式
new Question("do you need help?"){
    new Answer("yes"),
    new Answer("no"),
    new Answer("maybe")
}

现在答案将显示为单选按钮列表。 所以在我的“GetChildView”上的自定义适配器中,我用radiogroup检索视图然后我 “只是想把这个群体绑定到我的答案” - >因此,对于每个答案,都必须有相应的单选按钮。

我希望将“Answer”对象作为每个单选按钮的datacontext。

radioButton.Bind("Checked", "Chosen"); // where "Chosen" is the boolean property on "Answer"

但如果“Question”对象可以是我绑定到

的datacontext,那就已经没问题了
radioGroup.Bind("CheckedRadioButtonId", "ChosenAnswer"); // where "ChosenAnswer" is an int property 

关于“问题”

所以基本上我想将我的radiobutton绑定到我的customadapter中的代码中的MvxListItem.DataContext。 但我无法弄清楚如何做到这一点。 :/

你能给我一个提示吗?

当我允许多个答案时,我很乐意对复选框列表做同样的事情。

1 个答案:

答案 0 :(得分:0)

设置datacontext很简单:只需设置它:)

你所做的就是创建一个名为QuestionViewModel的ViewModel,它具有separet ViewModel所需的功能。

然后在View中创建一些组件以用于完整的问卷调查。下面是可绑定组件的一些示例代码。

public class BindableLinearLayout : ClickableLinearLayout, IMvxDataConsumer, IMvxBindingContextOwner 
    {
        public BindableLinearLayout(Orientation orientation, object dataContext)
            : base(orientation)
        {
            BindingContext = new MvxBindingContext();
            DataContext = dataContext;
        }



        public object DataContext { get { return BindingContext.DataContext; }
            set { BindingContext.DataContext = value;  }
        }

        public IMvxBindingContext BindingContext { get; set; }



    }

在问卷调查视图中,创建此组件并分配datacontext(在上面的示例中作为参数)。然后,您可以以正常方式创建绑定:

    var bindings2 = layout.CreateBindingSet<BindableLinearLayout, ParagraphViewModel>();
    bindings2.Bind(numberText.View).For(t => t.Text).To(vm => vm.Paragraph.Number);
    bindings2.Apply();

为您添加到集合中的每个元素调用此代码,并使用自己的Datacontext进行调用。

我知道这段代码不适用于列表适配器,但我希望这会给你足够的提示如何自己做。