【发布时间】:2026-01-01 21:30:01
【问题描述】:
我在Dynamically adding Entry Controls 中遇到了一个问题,Wendy Zang - MSFT 帮助并解决了它。
从API获取条目列表的代码写在.xml.cs页面中,在.xml页面中,StackLayout的Bindablelayout.ItemTemplate用于设置条目模板。
它运行良好,但提交表单的代码写在ViewModel。
当我将.xml.cs 页面的代码粘贴到ViewModel 时,我无法获取条目,并且当代码在xml.cs 中时,我必须在ViewModel 中设置this.BindingContext = this; 代码没有执行。
.xml
<StackLayout BindableLayout.ItemsSource="{Binding forms}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Entry Name="{Binding name}" Placeholder="{Binding label}" />
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
xml.cs
RootObject list = JsonConvert.DeserializeObject<RootObject>(fields);
forms = new List<Form>();
forms = list.data.FirstOrDefault().Form.ToList();
this.BindingContext = this;
XAML 和 ViewModel 中的按钮
<Button
x:Name="SubmitButton"
Text="Submit"
Command="{Binding FormCommand}">
public ICommand FormCommand=> new Command(async (x) => await FormButton(default, default));
更新
从服务器获取动态字段的代码。
public async Task CreateCollection()
{
Uri uri = new Uri(string.Format("http://example.com/entry"));
HttpClient httpClient = new HttpClient(new NativeMessageHandler());
HttpResponseMessage response = await httpClient.GetAsync(uri);
string entries = await response.Content.ReadAsStringAsync();
RootObject list = JsonConvert.DeserializeObject<RootObject>(entries);
form = new List<Form>();
form = list.data.FirstOrDefault().form.ToList();
}
【问题讨论】:
-
您的 xaml 文件中有
<ContentPage.Content>吗?如果是这样,应该是this.Content.BindingContent = this; -
@Shaw 感谢您的回复,我使用了这个但仍然无法在
ViewModel中提交表单(我从.xml页面和ViewModel发布了按钮代码示例).. 如果有在xml.cs中不是this.Content.BindingContent = this;,那么它是可点击的,否则它不是 -
如果我在
ViewModel中粘贴xml.cs代码(从api 获取条目),则无法查看条目.. -
去掉“x”,改成
async () =>。如果列表绑定没问题,继续使用之前的绑定代码。 -
@Shaw 我尝试了 Wendy 的解决方案,当应用程序处于调试模式时,我刷新
.xml页面,出现表单,否则它不会在第一次出现页面时出现.. 任何想法为什么会这样?
标签: c# .net xml xamarin xamarin.forms