[英]Xamarin.Forms - Labels Binding
在接近完成项目的同时,我遇到一个问题...在尝试将结果绑定到标签上时,我不断遇到以下错误:
Binding: 'Publisher' property not found on 'Nintendo', target property: 'Xamarin.Forms.Label.Text'
Binding: 'Publisher' property not found on 'Nintendo', target property: 'Xamarin.Forms.Label.Text'
Binding: 'Platform' property not found on 'Wii U', target property: 'Xamarin.Forms.Label.Text'
Binding: 'Platform' property not found on 'Wii U', target property: 'Xamarin.Forms.Label.Text'
我查看了多个站点以寻求帮助,但似乎无法弄清楚为什么它无法正常工作。 结果(任天堂,Wii U)是正确的,并显示在这些错误中,但没有任何内容绑定到我的标签上。 所以我的问题是...我到底在做什么错?
这是我的xaml:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Finale.DetailsPage"
xmlns:local="clr-namespace:Finale;assembly=Finale"
Title="{Binding Name}"
BackgroundColor="White">
<ScrollView VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<StackLayout Padding="5, 25">
<Label x:Name="lblTitle"
Text="{Binding Name}"
Font="Bold,Large"
HorizontalOptions="Center"/>
<Image x:Name="imgCover"
Source="{Binding Image}"
WidthRequest="200"
HeightRequest="200"/>
<StackLayout Padding="50, 10">
<!-- Developer -->
<StackLayout Orientation="Horizontal">
<Label Text="Developer(s):"
HorizontalOptions="FillAndExpand" />
<Label x:Name="lblDeveloper"
Text="{Binding Developer}"
Font="Bold,Medium" />
</StackLayout>
<!-- Publisher -->
<StackLayout Orientation="Horizontal">
<Label Text="Publisher(s):"
HorizontalOptions="FillAndExpand" />
<Label x:Name="lblPublisher"
Text="{Binding Publisher}"
Font="Bold,Medium" />
</StackLayout>
<!-- Platform -->
<StackLayout Orientation="Horizontal">
<Label Text="Platform(s):"
HorizontalOptions="FillAndExpand" />
<Label x:Name="lblPlatform"
Text="{Binding Platform}"
Font="Bold,Medium" />
</StackLayout>
<!-- Release Date -->
<StackLayout Orientation="Horizontal">
<Label Text="Release Date:"
HorizontalOptions="FillAndExpand" />
<Label x:Name="lblReleaseDate"
Text="{Binding ReleaseDate}"
Font="Bold,Medium" />
</StackLayout>
<!-- Summary -->
<StackLayout Orientation="Horizontal">
<Label x:Name="lblSummary"
Text="{Binding Summary}"
Font="Bold,Medium" />
</StackLayout>
</StackLayout>
</StackLayout>
</ScrollView>
</ContentPage>
这是我的.cs:
namespace Finale
{
public partial class DetailsPage : ContentPage
{
public ObservableCollection<Details> Details { get; set; }
DatabaseManager objDB;
List<ToDo> DID;
int prevGameID;
public DetailsPage()
{
InitializeComponent();
GetDetails ();
this.BindingContext = new Details();
}
public async Task GetDetails()
{
objDB = new DatabaseManager ();
DID = objDB.ViewNextG ();
prevGameID = DID [0].gameid;
try {
Details = new ObservableCollection<Details>();
var query = ParseObject.GetQuery("tblGameDetails")
.WhereEqualTo("gameid", prevGameID);
IEnumerable<ParseObject> games = await query.FindAsync ();
foreach (ParseObject game in games) {
int detailsid = game.Get<int>("id");
string gametitle = game.Get<String>("gametitle");
string developer = game.Get<String>("developer");
string publisher = game.Get<String>("publisher");
string platform = game.Get<String>("platform");
DateTime releasedate = game.Get<DateTime>("releasedate");
string image = game.Get<String>("image");
string summary = game.Get<String>("summary");
Details.Add(new Finale.Details
{
ID = detailsid,
Name = gametitle,
Developer = developer,
Publisher = publisher,
Platform = platform,
ReleaseDate = Convert.ToString(releasedate),
Image = image,
Summary = summary,
});
Console.WriteLine(detailsid + " " + gametitle);
}
lblTitle.BindingContext = Details[0].Name;
imgCover.BindingContext = Details[0].Image;
lblDeveloper.BindingContext = Details[0].Developer;
lblPublisher.BindingContext = Details[0].Publisher;
lblPlatform.BindingContext = Details[0].Platform;
lblReleaseDate.BindingContext = Convert.ToString(Details[0].ReleaseDate);
lblSummary.BindingContext = Details[0].Summary;
} catch (ParseException e) {
Console.WriteLine ("Error: ", e.Message);
}
}
}
}
1-您应该将DetailsItem存储在属性中
public Details TheDetailsItem { get; set; }
2-然后绑定到该对象
public DetailsPage()
{
InitializeComponent();
TheDetailsItem = new Details ();
this.BindingContext = TheDetailsItem;
GetDetails ();
}
避免为每个字段设置bindingcontext.So
3-移除:
lblTitle.BindingContext = Details[0].Name;
imgCover.BindingContext = Details[0].Image;
lblDeveloper.BindingContext = Details[0].Developer;
lblPublisher.BindingContext = Details[0].Publisher;
lblPlatform.BindingContext = Details[0].Platform;
lblReleaseDate.BindingContext = Convert.ToString(Details[0].ReleaseDate);
lblSummary.BindingContext = Details[0].Summary;
4-并替换为
TheDetailsItem.Name = Details[0].Name;
TheDetailsItem.Developer = Details[0].Developer;
etc...
5-您的Details对象应实现INotifyPropertyChanged(请参阅DemoCustomer 此处 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.