我想要一个ChecboxElements列表,其中第一个设置了点击时所有其他项目的选中状态。
第一个我可以正确绑定,但对于子元素,我遇到了一些问题。
如何动态添加项目并将它们绑定到列表中对象的属性?
var checkboxElement = new CheckboxElement("[All]");
var set = this.CreateBindingSet<LocationFilterView, LocationFilterViewModel>();
set.Bind(checkboxElement).For(v => v.Value).To(vm => vm.AllChecked).TwoWay();
section.Add(checkboxElement);
var checkListBindingSet = this.CreateBindingSet<LocationFilterView, CheckListItemViewModel>();
foreach (var checkListItem in ViewModel.As<LocationFilterViewModel>().CheckList)
{
var item = new CheckboxElement(checkListItem.Caption);
checkListBindingSet.Bind(item).For(v => v.Value).To(vm => vm.IsChecked).TwoWay();
section.Add(item);
}
set.Apply();
checkListBindingSet.Apply();
修改
也许我必须以更简单的方式提出这个问题:
我想在一个页面上显示一个检查选项列表(不是收音机),复选框视图模型保存在主视图模型的列表中。在Android中,可以使用Mvx.MvxListView
,MvxItemTemplate
属性和模板布局中的CheckBox
轻松完成此操作。对于iOS,我只是无法使绑定工作...
答案 0 :(得分:2)
您是否尝试在一个View(CheckListItemViewModel)中使用两个ViewModel?如果这不是一个要求,那么你不需要checkListBindingSet;所以..
foreach (var checkListItem in ViewModel.CheckLists)
{
var item = new CheckboxElement(checkListItem.Caption);
set.Bind(item).For(v => v.Value).To(vm => vm.IsChecked).TwoWay();
section.Add(item);
}
应该做的伎俩;
答案 1 :(得分:0)
我自己找到了解决方案(但Rana实际上是指向了正确的方向): 我必须将元素绑定放在一个单独的视图中:
// ...
var set = this.CreateBindingSet<LocationFilterView, LocationFilterViewModel>();
var selectAll = new ActivityElement { Caption = "All", Animating = false, ShouldDeselectAfterTouch = true };
set.Bind(selectAll).For(v => v.SelectedCommand).To(vm => vm.SelectAllCommand).TwoWay();
sectionButtons.Add(selectAll);
var selectNone = new ActivityElement { Caption = "None", Animating = false, ShouldDeselectAfterTouch = true };
set.Bind(selectNone).For(v => v.SelectedCommand).To(vm => vm.SelectNoneCommand).TwoWay();
sectionButtons.Add(selectNone);
var checkListItemViewModels = this.ViewModel.As<LocationFilterViewModel>().CheckList;
foreach (var view in checkListItemViewModels.Select(checkListItem => new CheckListItemView { ViewModel = checkListItem }))
{
view.CheckboxElement.Caption = view.ViewModel.Caption;
section.Add(view.CheckboxElement);
}
set.Apply();
// ...
public class CheckListItemView : BaseView
{
public CheckListItemView()
{
var set = this.CreateBindingSet<CheckListItemView, CheckListItemViewModel>();
var item = new CheckboxElement();
set.Bind(item).For(v => v.Value).To(vm => vm.IsChecked).TwoWay();
set.Apply();
this.CheckboxElement = item;
}
public new CheckListItemViewModel ViewModel
{
get { return base.ViewModel.As<CheckListItemViewModel>(); }
set { base.ViewModel = value; }
}
public Element CheckboxElement { get; set; }
}