【问题标题】:Display a list of names based on checked boxes in other page - Xamarin Forms根据其他页面中的复选框显示名称列表 - Xamarin Forms
【发布时间】:2022-02-01 10:40:16
【问题描述】:

我有一个包含很多标签和复选框的视图,它基本上是用户的问题列表,如果用户回答是,他们会选中复选框,否则不会。我有另一个与第一个视图相关的视图,它应该在其中获取并显示选中了哪些复选框。例如:

<Label Text="You have fever?" />
<CheckBox x:Name="fever" />

<Label Text="You have a running nose?" />
<CheckBox x:Name="running_nose" />

<Label Text="You are feeling dizzy?" />
<CheckBox x:Name="dizzy" />

在另一个页面上,我想显示在输入字段中检查的值。假设用户检查发烧和头晕。在另一个页面上,它会显示如下内容:

"You marked *fever*, *dizzy*. Is that right?"

我该怎么做?我知道我可以使用数据绑定。但不确定如何。在我的实际应用程序中,我有大约 10 个字段,我需要在另一个页面上显示被标记的字段。我还考虑不显示具有这些值的条目,而是为每个选中的框创建一张卡片(我的应用要复杂得多,症状只是一个示例)。

【问题讨论】:

    标签: c# xamarin checkbox data-binding


    【解决方案1】:

    您需要为数据建模

    创建一个类似这样的类

    public class Symptom
    {
      public string Name { get; set; }
      public string Prompt { get; set; }
      public bool Selected { get; set; }
    }
    

    然后用数据创建一个列表

    List<Symptom> symptoms = new List<Symptom>();
    
    symptoms.Add(new Sympton { Name = "fever", Prompt = "You have fever?" });
    // repeat for others
    

    然后您可以在 ListView 或 CollectionView 中显示此数据

    <ListView x:Name="lstSymptoms">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                    <Label Text="{Binding Prompt}" />
                    <Checkbox Selected="{Binding Selected" />
                <StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView>
    

    然后在后面的代码中,将您的模型分配给列表

    lstSymptoms.ItemSource = symptoms;
    

    当用户完成选择后,您可以使用 LINQ 创建仅包含所选症状的列表,并将其传递到下一页

    【讨论】:

    • 感谢您的回复!没有办法自动将数据绑定到其他页面吗?我的第一个想法是创建一个事件处理程序,每当检查更改时都会触发该事件处理程序,此方法将获取发件人的 ClassID 并作为字符串添加到 List 然后我将该 List 传递给另一个页面通过我想做更多的动态(使用数据绑定)。这些解决方案不相似吗?
    • 只是传递字符串并不是对数据建模的好方法。您当然也可以在第二页上使用绑定
    • 很公平。好的,我试试看。非常感谢!
    • 嘿,我还有一个问题。我正在实施您的解决方案(并且工作正常),但现在我需要将列表传递到另一个页面,但是两个页面都是来自同一个父级的选项卡式页面。关于如何将列表从一个传递到另一个的任何提示?
    • 你的意思是两个页面都是同一个 TabbedPage 的子页面吗?
    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2013-11-21
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2016-10-30
    相关资源
    最近更新 更多