[英]MvvmCross: Bind each Item of a List
我想要一个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,我只是无法使绑定正常工作...
因此,您是否尝试在一个视图(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);
}
应该做到这一点;
我自己找到了解决方案(但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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.