【问题标题】:Xamarin Forms Clear All EntriesXamarin 表单清除所有条目
【发布时间】:2021-07-24 06:12:39
【问题描述】:

有没有办法清除 Xamarin.Forms 应用程序中的所有条目?我检查了这个链接here,但没有帮助。

【问题讨论】:

  • 是的。遍历所有这些并清除它们的值,或清除它们绑定的模型属性。但是没有内置函数可以神奇地为你做到这一点。
  • 对于提供的链接,他只是创建了另一个视图模型实例,因此页面上绑定的每个文本值都会被清除为默认值。您所说的“没有帮助”是什么意思,任何要发布的代码。
  • @Shaw 我认为他正在使用 MVVM 对吗?我不使用它。如果我错了,请纠正我。
  • @Jason 你能添加一些代码 sn-p 吗?我正在寻找一种方法来获取所有条目并遍历它们,或者给它们一个像 HTML 这样的类并清除它们。

标签: c# xamarin xamarin.forms mobile


【解决方案1】:

我使用了@Bassies 代码,经过修改以从布局中动态清除条目。因此,您不需要在后面的代码中添加引用。此方法将遍历每个项目和明文。因此,在比较@Bassies 方式时,这种动态方法将花费更多时间来处理。但这将是可以忽略不计的时间,因为单个页面视图不会包含大量视图(例如 10000 或更多)

 public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            var child = this.Content as Layout;
            if (child != null)
            {
                ProcessLayoutChildren(child);
            }
        }

        public void ProcessLayoutChildren(Layout child)
        {
            foreach (var item in child.Children)
            {
                var layout = item as Layout;
                if (layout != null)
                {
                    ProcessLayoutChildren(layout);
                }
                else
                {
                    ClearEntry(item);
                }
            }

            void ClearEntry(Element entryElement)
            {
                var entry = entryElement as Entry;
                if (entry != null)
                {
                    entry.Text = string.Empty;
                }
            }
        }
    }

【讨论】:

  • 听起来像@Houssem 的回答。我赞成它,但由于他首先回答,因此没有将其标记为已接受。谢谢你
【解决方案2】:

我还没有测试过,但它应该可以工作

您可以遍历布局中的所有子视图并清除其中的条目。

如果您使用的是 XAML,请为您的布局命名,以便您可以在后端代码中访问它

<StackLayout x:Name="MyForm">
    <Label Text="Anything"/>
    <Entry />
    <Entry />
    <Entry />
    <Button Text="Clear" x:Name="Clear" Clicked="Clear_Clicked" />

</StackLayout>

然后在你的后端:

private void Clear_Clicked(object sender, EventArgs e)
{
    foreach (View view in MyForm.Children)
    {

        if(view is Entry)
        {
            (view as Entry).Text = String.Empty;
        }
    }

}

【讨论】:

    【解决方案3】:

    也许不是正确的方式,但它是如何在 1 页上工作的示例。

    您可能想更改它,但请告诉我们它是如何工作的

    <StackLayout>
        <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
            <Label Text="Clear All" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
        </Frame>
    
        <Entry x:Name="Nr1" />
        <Entry x:Name="Nr2" />
        <Entry x:Name="Nr3" />
        <Button Text="Clear" Clicked="Button_Clicked" />
    
    </StackLayout>
    

    并且 制作一个列表并为条目命名,我使用 Nr1、Nr2 和 Nr3,但仅作为示例。

    public partial class MainPage : ContentPage
    {
        List<Entry> entry = new List<Entry>();
        public MainPage()
        {
            InitializeComponent();
            entry.Clear();
            entry.Add(Nr1);
            entry.Add(Nr2);
            entry.Add(Nr3);
    
        }
    
        private void Button_Clicked(object sender, EventArgs e)
        {
            foreach (var entry in entry)
            {
    
                entry.Text = "";
            }
    
        }
    }
    

    【讨论】:

    • 做了一个小例子,你可以在这里找到。 github.com/borisoprit/Clearentry
    • 我认为这可行但不接受它,因为不是将它们放在列表中并循环它们然后我可以立即清除它们。但感谢你的帮助
    • @Sam 没问题,我在我的应用程序中使用了它,因为我不想清除 20 个条目中的 3 个。这就是我使用列表的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多