我想向我的Xamarin表单中添加一个Picker,该表单显示模板名称列表,并允许用户选择一个。如何在Xamarin Picker中调试绑定问题
这里是以下形式:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DefectReport"
x:Class="DefectReport.VehiclePage">
<ContentPage.Content>
<ScrollView>
<StackLayout>
<Label x:Name="Message" TextColor="Red" />
<Label Text="Registration Number" />
<Entry Text="{Binding Vehicle.RegistrationNumber}" />
<Label Text="Description" />
<Entry Text="{Binding Vehicle.Description}" />
<Entry Text="Vehicle Type" />
<Picker ItemsSource="{Binding Templates, PresentationTraceSources.TraceLevel=High}" ItemDisplayBinding="{Binding TemplateName}" SelectedItem="{Binding SelectedTemplate}"/>
<Button Text="Save" Clicked="SaveButton_Clicked" />
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>
这里是后面的代码:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class VehiclePage : ContentPage {
Vehicle Vehicle { get; set; }
ObservableCollection<Template> Templates { get; set; }
Template SelectedTemplate { get; set; }
public VehiclePage(Vehicle vehicle, List<Template> templates) {
Vehicle = vehicle ?? new Vehicle();
Templates = new ObservableCollection<Template>(templates);
SelectedTemplate = templates.FirstOrDefault(t => t.ServerRecordId == Vehicle.TemplateId) ?? templates.FirstOrDefault();
BindingContext = this;
InitializeComponent();
}
private async void SaveButton_Clicked(object sender, EventArgs e) {
}
}
模板和车辆类别:
public class Template {
[PrimaryKey]
[AutoIncrement]
public int DeviceRecordId { get; set; }
[Indexed]
public int idTemplate { get; set; }
public string TemplateName { get; set; }
public string TemplateData { get; set; }
[Ignore]
public int ServerRecordId {
get {
return idTemplate;
}
set {
idTemplate = value;
}
}
}
public class Vehicle {
[PrimaryKey]
[AutoIncrement]
public int DeviceRecordId { get; set; }
[Indexed]
public int idVehicle { get; set; }
[Indexed]
public string RegistrationNumber { get; set; }
public string Description { get; set; }
public int TemplateId { get; set; }
[Ignore]
public ServerRecordId {
get {
return idVehicle;
}
set {
idVehicle = value;
}
}
}
当我显示形式,供给列表的1个模板中,下拉列表中没有模板。
另外,当我向表单输入数据时,在SaveButton_Clicked方法中,即使输入了一些数据,Vehicle.RegistrationNumber和Vehicle.Description也没有填充。
我看不到如何调试 - 这一切都隐藏起来!
你只能绑定到属性 - 模板不是属性 – Jason
要调试绑定,通常:'ControlProperty =“{绑定MyVMProp,PresentationTraceSources.TraceLevel = High}'。在调试器的运行时,您会在VS Output窗格中看到大量的调试信息。 –
我现在已将可绑定项目更改为属性(我已更改问题中的代码)。我添加了PresentationTraceSources.TraceLevel = High,但它停止窗体编译“错误:值不能为空。错误:参数名称:clrNamespace“ –