C# MvvmCross:绑定列表中的每个项目

C# MvvmCross:绑定列表中的每个项目,c#,binding,xamarin,mvvmcross,C#,Binding,Xamarin,Mvvmcross,我想要一个ChecboxElements列表,其中第一个设置单击时所有其他项的选中状态 这是我可以正确绑定的第一个元素,但是对于子元素,我遇到了一些问题 如何动态添加项并将其绑定到列表中对象的属性 var checkboxElement = new CheckboxElement("[All]"); var set = this.CreateBindingSet<LocationFilterView, LocationFilterViewModel>(); set.Bind(che

我想要一个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();
var checkboxElement=new checkboxElement(“[All]”);
var set=this.CreateBindingSet();
set.Bind(checkboxElement).For(v=>v.Value).To(vm=>vm.AllChecked.TwoWay();
节。添加(复选框元素);
var checkListBindingSet=this.CreateBindingSet();
foreach(ViewModel.As().CheckList中的var checkListItem)
{
var item=新的CheckboxElement(checkListItem.Caption);
checkListBindingSet.Bind(item).For(v=>v.Value).To(vm=>vm.IsChecked.TwoWay();
第节.添加(项目);
}
set.Apply();
checkListBindingSet.Apply();
编辑: 也许我得用一种更简单的方式问这个问题:
我想在一个页面上显示一个复选选项列表(不是单选),复选框视图模型保存在主视图模型的列表中。在Android中,这可以通过模板布局中的
Mvx.MvxListView
MvxItemTemplate
属性和
复选框来轻松实现。对于iOS,我只是无法使绑定工作…

那么您是否尝试在一个视图中使用两个ViewModel(CheckListItemViewModel)?如果这不是一个要求,那么您不需要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);
}

我们应该做到这一点

我自己找到了解决办法(但拉娜实际上指向了正确的方向): 我必须将元素绑定放到一个单独的视图中:

// ...
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; }
}
/。。。
var set=this.CreateBindingSet();
var selectAll=new ActivityElement{Caption=“All”,Animating=false,shouldUncelleAfterTouch=true};
set.Bind(selectAll).For(v=>v.SelectedCommand).To(vm=>vm.SelectAllCommand.TwoWay();
sectionButtons.Add(选择全部);
var selectNone=new ActivityElement{Caption=“None”,Animating=false,shouldDecleseAfterTouch=true};
set.Bind(selectNone).For(v=>v.SelectedCommand).To(vm=>vm.SelectNoneCommand.TwoWay();
部分按钮。添加(选择无);
var checkListItemViewModels=this.ViewModel.As().CheckList;
foreach(checkListItemViewModels.Select中的var视图(checkListItem=>new CheckListItemView{ViewModel=checkListItem}))
{
view.CheckboxElement.Caption=view.ViewModel.Caption;
节。添加(视图。复选框元素);
}
set.Apply();
// ...
公共类CheckListItemView:BaseView
{
公共CheckListItemView()
{
var set=this.CreateBindingSet();
var item=new CheckboxElement();
set.Bind(item).For(v=>v.Value).To(vm=>vm.IsChecked).TwoWay();
set.Apply();
this.CheckboxElement=项目;
}
公共新CheckListItemViewModel视图模型
{
获取{return base.ViewModel.As();}
设置{base.ViewModel=value;}
}
公共元素CheckboxElement{get;set;}
}

你好,拉娜,谢谢你的帮助。这也是我第一次尝试,但它不起作用,因为绑定行上的
=>vm
部分引用的是当前的页面视图模型,但我需要绑定到
CheckListItemViewModel
。实际上,我是一个视图中的两个视图模型。我认为,问题在于我的行
var checkListBindingSet=this.CreateBindingSet()高网格,我不确定在这种情况下checkListBindingSet应该如何工作;在我看来,这一套并没有以任何方式介绍给你。如果它确实需要两个虚拟机,您是否尝试将CheckListItemViewModel作为视图连接到的主ViewModel的属性?这应该行得通