डेटासोर्स (एचयूबी टेम्पलेट) से एक्सएएमएल के लिए विंडोज फोन 8.1 बाध्यकारी डेटा - सी #, एक्सएमएल, विंडोज़-फोन -8, विंडोज़-फोन-8.1

मुझे मदद की ज़रूरत है...

इसलिए अनिवार्य रूप से मैं WP 8.1 विकास ट्यूटोरियल देख रहा हूं और मानक हब टेम्पलेट के साथ एक ट्यूटोरियल था।

तो मैंने इस टेम्पलेट को अपने लिए कॉन्फ़िगर करने का प्रयास कियाउपयोग। मेरे पास एक JSON फ़ाइल है जिसमें मुझे आवश्यक सभी डेटा (अपार्टमेंट) हैं जिन्हें मैं अब अपने पृष्ठ पर सूची चाहता हूं। मैंने SampleDataSource को "पुनर्निर्मित" किया है जो मेरे ऐप में केवल डेटासोर्स है। मुझे लगता है कि डेटा के साथ सब कुछ ठीक है और अब इस डेटा का अनुवाद करने और XAML को बाध्य करने में समस्या आती है। मैं वास्तव में नहीं जानता कि यह क्यों काम नहीं कर रहा है क्योंकि मैंने टेम्पलेट में काम करने वाले पैरामीटर को बदलने की कोशिश की है (एसडीके द्वारा प्रदान की गई)। क्या आप लोग मेरी मदद कर सकते हैं या मुझे कुछ दिशा दे सकते हैं जहां मुझे ऐसा करने के लिए उदाहरण मिल सकता है।

अगर कोई मदद या स्काइप / TW करने के इच्छुक होगामेरे साथ सिर्फ मुझे संरचना दिखाने के लिए और मुझे क्या करना है, मैं आभारी रहूंगा क्योंकि मुझे पता चलेगा कि यह मूल रूप से अनुवाद कैसे करता है और काम करता है ताकि मैं परियोजना के अन्य वर्गों पर काम कर सकूं! एक इनाम के रूप में bitcoins है! :)

अग्रिम में Thx।

संपादित करें: गिथब रेपो जोड़ें: https://github.com/lklancir/zimmerfrei_wp/tree/master/ZimmerFrei_v0.1

यहां DataSource.cs है:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Data.Json;
using Windows.Storage;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;

नामस्थान ZimmerFrei.Data {

public class ApartmentData
{
public ApartmentData(String id, String name, String description, String capacity, String stars, String address, String email, String phone, String phone2, String rating, String lat, String lng, String price, String cover_photo, String owner_id, String type_id, String city_id)
{
this.Id = id;
this.Name = name;
this.Description = description;
this.Capacity = capacity;
this.Stars = stars;
this.Address = address;
this.Email = email;
this.Phone = phone;
this.Phone2 = phone2;
this.Rating = rating;
this.Lat = lat;
this.Lng = lng;
this.Price = price;
this.Cover_photo = cover_photo;
this.Owner_id = owner_id;
this.Type_id = type_id;
this.City_id = city_id;


}

public string Id { get; private set; }
public string Name { get; private set; }
public string Description { get; private set; }
public string Capacity { get; private set; }
public string Stars { get; private set; }
public string Address { get; private set; }
public string Email { get; private set; }
public string Phone { get; private set; }
public string Phone2 { get; private set; }
public string Rating { get; private set; }
public string Lat { get; private set; }
public string Lng { get; private set; }
public string Price { get; private set; }
public string Cover_photo { get; private set; }
public string Owner_id { get; private set; }
public string Type_id { get; private set; }
public string City_id { get; private set; }

public override string ToString()
{
return this.Name;
}
}



public sealed class DataSource
{
private static DataSource _dataSource = new DataSource();

private ObservableCollection<ApartmentData> _apartments = new ObservableCollection<ApartmentData>();

public ObservableCollection<ApartmentData> Apartments
{
get { return this._apartments; }
}

public static async Task<IEnumerable<ApartmentData>> GetApartmentsAsync()
{
await _dataSource.GetDataAsync();

return _dataSource.Apartments;
}

public static async Task<ApartmentData> GetApartmentAsync(string id)
{
await _dataSource.GetDataAsync();
var matches = _dataSource.Apartments.Where((apartment) => apartment.Id.Equals(id));
if (matches.Count() == 1) return matches.First();
return null;
}



private async Task GetDataAsync()
{
if (this._apartments.Count != 0)
return;

Uri dataUri = new Uri("ms-appx:///DataModel/Apartments.json");
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
string jsonText = await FileIO.ReadTextAsync(file);
JsonObject jsonObject = JsonObject.Parse(jsonText);
JsonArray jsonArray = jsonObject["apartments"].GetArray();

foreach (JsonValue apartmentValue in jsonArray)
{
JsonObject apartmentObject = apartmentValue.GetObject();
ApartmentData apartment = new ApartmentData(apartmentObject["Id"].GetString(),
apartmentObject["Name"].GetString(),
apartmentObject["Description"].GetString(),
apartmentObject["Capacity"].GetString(),
apartmentObject["Stars"].GetString(),
apartmentObject["Address"].GetString(),
apartmentObject["Email"].GetString(),
apartmentObject["Phone"].GetString(),
apartmentObject["Phone2"].GetString(),
apartmentObject["Rating"].GetString(),
apartmentObject["Lat"].GetString(),
apartmentObject["Lng"].GetString(),
apartmentObject["Price"].GetString(),
apartmentObject["Cover_photo"].GetString(),
apartmentObject["Owner_id"].GetString(),
apartmentObject["Type_id"].GetString(),
apartmentObject["City_id"].GetString());

this.Apartments.Add(apartment);
}
}
}

}

यहाँ है ListPage.xaml (जहां मैं अपना डेटा लिखना चाहता हूं)

<Page
x:Class="ZimmerFrei_v0._1.ListPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ZimmerFrei_v0._1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:data="using:ZimmerFrei.Data"
DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
d:DataContext="{Binding Source={d:DesignData Source=/DataModel/Apartments.json, Type=data:DataSource}}"
mc:Ignorable="d" FontFamily="Global User Interface">


<Page.Resources>


<DataTemplate x:Key="StandardTripleLineItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,9.5,0,0" Grid.Column="0" HorizontalAlignment="Left">
<Image Source="{Binding Cover_photo}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}" Height="79" Width="79"/>
</Border>
<StackPanel Grid.Column="1" Margin="14.5,0,0,0">
<TextBlock Text="{Binding Name}" Style="{ThemeResource ListViewItemTextBlockStyle}" FontFamily="Global User Interface"/>
<TextBlock Text="{Binding Description}" Style="{ThemeResource ListViewItemContentTextBlockStyle}" Foreground="{ThemeResource PhoneMidBrush}" FontFamily="Global User Interface" />
<TextBlock Text="{Binding Stars}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" />
</StackPanel>
</Grid>
</DataTemplate>

</Page.Resources>

<Grid x:Name="LayoutRoot">
<Hub x:Name="Hub" x:Uid="Hub" Header="ZimmerFrei">

<HubSection x:Uid="HubSection" Header="APARTMENTS"
DataContext="{Binding Apartments}" >
<DataTemplate>
<ListView
AutomationProperties.AutomationId="ItemListViewSection3"
AutomationProperties.Name="Items In Group"
SelectionMode="None"
IsItemClickEnabled="True"
ItemsSource="{Binding apartment}"
ItemTemplate="{StaticResource StandardTripleLineItemTemplate}"
ItemClick="ItemView_ItemClick"
ContinuumNavigationTransitionInfo.ExitElementContainer="True">
</ListView>
</DataTemplate>
</HubSection>
</Hub>
</Grid>

यहां छवि विवरण दर्ज करें

उत्तर:

उत्तर № 1 के लिए 1

यहां कुछ मुद्दे हैं:

  • तुंहारे ApartmentData कक्षा में इस तरह के कुछ गुण हैं Cover_photo। यह आम तौर पर सी # द्वारा उपयोग की जाने वाली शैली सम्मेलन नहीं है, इसलिए मैंने उन्हें नाम बदल दिया CoverPhoto
  • उसी विषय पर, आपका ApartmentData गुणों का नाम दिया गया है Cover_photo लेकिन उन्हें नाम दिया गया है cover_photo JSON में (जो एक सामान्य JSON शैली है)। आप इस तरह JSON कुंजी तक पहुंच रहे हैं:

    apartmentObject["Cover_photo"].GetString()  // KeyNotFoundException
    

    लेकिन यह होना चाहिए:

    apartmentObject["cover_photo"].GetString()
    

    यह रनटाइम के दौरान काम करेगा, परंतु डिजाइनर ने इस कोड को निष्पादित नहीं किया।डिजाइनर JSON फ़ाइल पढ़ता है और जेएसओएन फ़ाइल में कुंजियों से मिलान करने के प्रयासों को आपके द्वारा निर्दिष्ट प्रकार के गुणों पर मिलान करने का प्रयास करता है, लेकिन यह "कुंजी और गुणों से मेल नहीं खाता क्योंकि यह सक्षम नहीं होगा"। तो या तो आप:

    1. JSON को संशोधित करें ताकि चाबियाँ गुणों से मेल खाती हैं CoverPhoto
    2. अपने प्रकार के साथ एनोटेट करें DataContractAttribute। यह आपको JSON और .NET प्रकार के बीच मैपिंग निर्दिष्ट करने की अनुमति देता है DataMemberAttribute, लेकिन ज्यादातर क्योंकि आप जेएसओएन क्रमबद्धता / deserialization मिलता है!

मैंने आपको इन परिवर्तनों के साथ एक पुल अनुरोध भेजा है। इसके अलावा, आपका डिज़ाइन डेटा विशाल है (~ 1000 आइटम!)। इसमें केवल 5 आइटम होना चाहिए क्योंकि आप डिज़ाइनर में सभी आइटमों को वैसे भी देख पाएंगे।


संबंधित सवाल
सबसे लोकप्रिय