Xamarin 表单清除所有条目
Posted
技术标签:
【中文标题】Xamarin 表单清除所有条目【英文标题】:Xamarin Forms Clear All Entries 【发布时间】:2021-07-24 06:12:39 【问题描述】:有没有办法清除 Xamarin.Forms 应用程序中的所有条目?我检查了这个链接here,但没有帮助。
【问题讨论】:
是的。遍历所有这些并清除它们的值,或清除它们绑定的模型属性。但是没有内置函数可以神奇地为你做到这一点。 对于提供的链接,他只是创建了另一个视图模型实例,因此页面上绑定的每个文本值都会被清除为默认值。您所说的“没有帮助”是什么意思,任何要发布的代码。 @Shaw 我认为他正在使用 MVVM 对吗?我不使用它。如果我错了,请纠正我。 @Jason 你能添加一些代码 sn-p 吗?我正在寻找一种方法来获取所有条目并遍历它们,或者给它们一个像 html 这样的类并清除它们。 【参考方案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 个。这就是我使用列表的原因。以上是关于Xamarin 表单清除所有条目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UWP 上的 Xamarin 表单条目中垂直居中文本?
如何在 UWP 上的 Xamarin 表单条目中垂直居中文本?