Aja*_*air 4 c# xamarin xamarin.forms
我正在使用 Xamarin.Forms 开发一个项目,我需要在运行时动态创建条目字段。
例如,用户会被要求输入一个团队中的球员数量,并根据用户提供的数据Entry为每个球员创建诸如姓名、年龄、联系人等字段。
在你的 xaml.cs 中,你可以这样做
for(var i = 0; i < 10; i++)
{
Panel.Children.Add(new Entry());
}
Run Code Online (Sandbox Code Playgroud)
在你的 xaml 中,你有类似的东西
<StackLayout x:Name=Panel/>
Run Code Online (Sandbox Code Playgroud)
更好的解决方案是在xaml中创建一个ContentView(即PlayerTemplate),然后,你可以这样做
for(var i = 0; i < 10; i++)
{
Panel.Children.Add(new PlayerTemplate());
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果你想存储数据,你可以执行以下操作
在您的 ViewModel 类中,您有:
public IEnumerable<PlayerViewModel> Players {get; set;}
Run Code Online (Sandbox Code Playgroud)
Players当然,您的视图模型应该实现 INotifyPropertyChanged 并且您应该在设置属性时引发事件
那么在你看来,你可以这样做:
foreach(var player in myViewModel.Players)
{
Panel.Children.Add(new PlayerTemplate{ BindingContext = player });
}
Run Code Online (Sandbox Code Playgroud)
绑定将更新每个玩家。
但这将如何帮助我动态添加输入字段,即根据用户输入的玩家数量?
首先,您可以通过 C# 动态创建它们,也可以添加它们并将它们隐藏在 Xaml 中。在 Xaml 方式的情况下,您可以做的是添加条目并将它们的可见性设置为 false,您实际上不需要创建 x 个条目,您只想根据玩家数量收集数据。
因此,首先,只需为您想要的每个字段添加一个条目:
<Entry x:Name="NameEntry" IsVisible="false" />
<Entry x:Name="AgeEntry" IsVisible="false" />
Run Code Online (Sandbox Code Playgroud)
现在,在用户提供他的玩家数量后,首先您将条目设为在您的 xaml.cs 中可见:
NameEntry.IsVisible = true;
AgeEntry.IsVisible = true;
Run Code Online (Sandbox Code Playgroud)
您可以将玩家数量存储在一个变量中,我猜您会有一个按钮来保存数据,对吗?每次点击该按钮后,您检查保存的数据数量是否已达到玩家数量并清除条目,一旦达到,您将它们变回不可见:
NameEntry.Text = string.Empty;
AgeEntry.Text = string.Empty;
numberOfSavedData++;
//your saving logic in your button click
if (numberOfSavedData == numberOfPlayers)
{
NameEntry.IsVisible = false;
AgeEntry.IsVisible = false;
//etc...
}
Run Code Online (Sandbox Code Playgroud)
这并不是真正动态创建它们,这只是为了隐藏/显示条目。现在,如果您想创建它们然后稍后删除它们,您也可以在 xaml.cs 中进行。建议是在您的 xaml 中创建堆栈布局以向其中添加条目。
<StackLayout x:Name="EntriesStackLayout">
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
在您的 xaml.cs 中,提供玩家数量后,您只需添加 1 个所需数据条目,例如:
Entry nameEntry = new Entry();
Entry ageEntry = new Entry();
EntriesStackLayout.Children.Add(nameEntry);
EntriesStackLayout.Children.Add(ageEntry);
Run Code Online (Sandbox Code Playgroud)
如前所述,您当然会有一个按钮来保存数据,您可以在处理程序中执行相同的操作,例如:
nameEntry.Text = string.Empty;
ageEntry.Text = string.Empty;
numberOfSavedData++;
//click handler
if (numberOfSavedData == numberOfPlayers)
{
EntriesStackLayout.Children.Remove(nameEntry);
EntriesStackLayout.Children.Remove(ageEntry);
//etc...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8233 次 |
| 最近记录: |