簡體   English   中英

Xamarin.Forms-標簽綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM