我有一些非常棘手的问题。我已经尝试搜索网络甚至查看了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。 但我无法弄清楚如何做到这一点。 :/
你能给我一个提示吗?
当我允许多个答案时,我很乐意对复选框列表做同样的事情。
答案 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进行调用。
我知道这段代码不适用于列表适配器,但我希望这会给你足够的提示如何自己做。