通过索引将开关值绑定到列表元素

时间:2018-05-18 07:57:31

标签: xaml xamarin data-binding xamarin.forms binding

我有一个多次切换(一周中的几天),我想将它绑定到列表特定的索引,如星期六=> mylist [0],星期日mylist [1] 现在,当我试图获得价值时,它会返回null!

我的ViewModel

  private List<bool> _days;

  public List<bool> Days
    {
        get => _days;
        set
        {
            if (Equals(value, _days)) return;
            _days = value;
            OnPropertyChanged();
        }
    }

我的观点

<Switch IsToggled="{Binding Days[0]}" Grid.Row="4" Grid.Column="0"
                Scale="1.5" x:Name="SaturdaySwitch"></Switch>
 <Switch IsToggled="{Binding Days[1]}" Grid.Row="5" Grid.Column="0"
                Scale="1.5" x:Name="SundaySwitch"></Switch>

1 个答案:

答案 0 :(得分:1)

为了向您展示如何在代码中,我为您创建了这个快速而肮脏的示例,可以在此处找到:https://github.com/jfversluis/FixedArraySample

在ViewModel(这里名为PageModel)中,我定义了一个用7个值初始化的List。

public List<bool> Days { get; set; } = new List<bool>
{
    false,
    false,
    true,
    false,
    false,
    false,
    true
};

然后在页面中,我这样绑定它:

<StackLayout Orientation="Horizontal">
    <Label Text="Monday" />
    <Switch IsToggled="{Binding Days[0]}" />
</StackLayout>

这导致下面的屏幕。 Databound Switch controls

要在切换开关时在列表中重新设置值,您可能还想添加双向数据绑定,例如:<Switch IsToggled="{Binding Days[0], Mode=TwoWay}" />

现在,相应的Days列表中的值会更新,您可以在ViewModel中访问它们。