【问题标题】:How to select only one Toggle Switch in Listview?如何在 Listview 中只选择一个 Toggle Switch?
【发布时间】:2021-08-22 11:26:13
【问题描述】:

我有一个Listview,它有拨动开关。我想用拨动开关在Listview 中只选择一项。当我选择第二个切换时,第一个切换必须再次停用。例如在图片中;当我选择 Rekorida 然后我选择 Merchandizing 时,Rekorida 必须转回禁用。每次只能激活一个选项。是否可以在 Xamarin 中做到这一点?

我的列表查看代码:

 <ScrollView>
                    <ListView x:Name="ShipListView" HasUnevenRows="True" SeparatorVisibility="Default" SelectionMode="Single">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell>

                                    <Grid Margin="4, 3, 4, 3" Padding="2" BackgroundColor="White">
                                        <Grid.RowDefinitions HeightRequest="40">
                                            <RowDefinition></RowDefinition>
                                            <!--<RowDefinition Height="20"></RowDefinition>-->
                                        </Grid.RowDefinitions>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="80*"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                            <ColumnDefinition Width="40*"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>
                                        <Label Text="{Binding ShipName}" TextColor="DeepPink" Grid.Column="0" FontAttributes="Bold"/>
                                        <Switch  IsToggled="{Binding Selected}" Grid.Column="2" Toggled="OnShipToggled" />
                                    </Grid>

                                </ViewCell>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </ScrollView>

还有我的功能

async void OnShipToggled(object sender, ToggledEventArgs e)
    {
        
        checkShipSelected = !checkShipSelected;
        if(checkShipSelected)
        {
            
            ViewCell cell = (sender as Switch).Parent.Parent as ViewCell;

            ParametersMemberShipInformation model = cell.BindingContext as ParametersMemberShipInformation;

            if (model != null)
            {
                selectedMemberShipOid = model.Oid;
            }
        }
        else
        {
            return;
        }
        

    }

我正在尝试获取列表视图中所选项目的 id 并且我成功地做到了。但是我希望用户只能同时选择一个项目,因为它具有很好的视觉效果,并且不会混淆。

【问题讨论】:

  • 您介意共享一个最小代码,例如您的 xaml 吗?
  • @Cfun 我编辑了我的帖子。你可以看到我的代码。
  • 如果我选中“others”或“trade check”或四个开关中的任何一个开关,您认为其余的不会被选中吧?
  • 没错!!这就是我想做的全部

标签: xaml xamarin xamarin.forms xamarin.forms.listview


【解决方案1】:

在您的代码隐藏文件中获取您的视图模型,然后过滤掉选定的切换并将其余的切换标记为 false

private YourViewModel MyViewModel { get => BindingContext as YourViewModel; }

if (model != null)
{
 selectedMemberShipOid = model.Oid;
 MyViewModel.ShipListView.Where(x=> x.Oid != 
     selectedMemberShipOid).Foreach(x=> x.Selected = false)
 
}

【讨论】:

  • @Veysel 你能告诉我名单的名称吗?它绑定到 ListView。您可以将列表名称替换为 MyList
  • "ShipListView" 这是我的列表名称。而你的方式是如此合乎逻辑。我会试试看。谢谢回答。如果可行,我会接受你的回答
  • 我无法完全解决我的问题,但我可以说我几乎用你的好主意解决了它。这就是为什么我会接受你的回答。再次感谢!!!
猜你喜欢
  • 1970-01-01
  • 2012-02-28
  • 2019-09-18
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多