0

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

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

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

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

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

我希望将“答案”对象作为每个单选按钮的数据上下文。

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

但是,如果“问题”对象可以是我绑定到的数据上下文,那已经很好了

radioGroup.Bind("CheckedRadioButtonId", "ChosenAnswer"); // where "ChosenAnswer" is an int property 

关于“问题”

所以基本上我想将我的单选按钮绑定到我的 customadapter 中的代码中的 MvxListItem.DataContext。但我就是不知道该怎么做。:/

你能给我一个提示吗?

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

4

1 回答 1

0

设置数据上下文很容易:只需设置它:)

您所做的是创建一个名为 QuestionViewModel 之类的 ViewModel,它具有您需要的独立 ViewModel。

然后为完整的问卷创建一些组件以在您的视图中使用。下面是可绑定组件的一些示例代码。

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; }



    }

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

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

为您添加到集合中的每个元素调用此代码,每个元素都有自己的 Datacontext。

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

于 2013-09-17T09:25:54.040 回答