2014-01-03 4 views
2

Это первый раз, когда я создаю приложение для Windows 8, просто потому, что у меня есть для школьного проекта. Я не новичок в привязке данных и т. Д. В xaml, но отличается ли это при создании приложения W8, потому что он не работает, как обычно.Datacontext Windows 8 app

код

XAML: (мой DataTemplate в)

<ItemsControl ItemTemplate="{StaticResource test}" DataContext="{Binding ListLineup}"> 
<DataTemplate x:Key="test"> 
     <StackPanel> 
      <TextBlock Text="{Binding Date}"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 

Модель: (данные загружаются из JSON-файла)

public class LineUp 
{ 
    public string Id { get; set; } 
    public string Date { get; set; } 
    public string From { get; set; } 
    public string Until { get; set; } 

    public LineUp(string id, string date, string from, string until) 
    { 
     this.Id = id; 
     this.Date = date; 
     this.From = from; 
     this.Until = until; 
    } 

    public static async Task<List<LineUp>> GetLineUp() 
    { 
     List<LineUp> lineup = new List<LineUp>(); 
     using (HttpClient client = new HttpClient()) 
     { 
      string url = @"http://localhost:28603/api/LineUp"; 
      Uri uri = new Uri(url); 
      using (HttpResponseMessage response = await client.GetAsync(uri)) 
      { 
       if (response.IsSuccessStatusCode) 
       { 
        string content = await response.Content.ReadAsStringAsync(); 
        content = "{'lineups':" + content + "}"; 

        ListLineUp CollectionOfLineUps = await JsonConvert.DeserializeObjectAsync<ListLineUp>(content); 
        foreach (LineUp newLineup in CollectionOfLineUps.lineups) 
        { 
         lineup.Add(newLineup); 
        } 
       } 
       else 
       { 
        Debug.WriteLine("Exception when getting the LineUps. API is down "); 
       } 
      } 
     } 
     return lineup; 
    } 
} 

public class ListLineUp 
{ 
    public List<LineUp> lineups { get; set; } 
} 

код за XAML:

public async void GetAllNeededLists() 
    { 
     ListLineup = await LineUp.GetLineUp(); 
     foreach (var lu in ListLineup) 
     { 
      Debug.WriteLine(lu.Date); 
     } 

    } 

При работе I получить все данные в окне отладки с моими датами. Когда я запускаю приложение, есть текстовый блок, но в нем нет содержимого.

+0

Я не имел удачи делать это так, как вы сделали; Мне всегда приходилось делать «Control.ItemsSource = myEnumerable;» (или в некоторых случаях .DataContext) – Nate

ответ

0

Чтобы показать элементы в ItemsControl, вам необходимо установить свойство ItemsSource с помощью объекта IEnumerable.

<ListView ItemsSource="{Binding lineups}"/> 

И установить объект ListLineUp в DataContext выше ListView.

Чтобы установить DataTemplate, используйте ItemTemplate.

<ListView.ItemTemplate> 
    <DataTemplate>...</DataTemplate> 
</ListView.ItemTemplate> 
+1

Спасибо, я использовал itemsSource перед datacontext, но это тоже не сработало. Моя база данных находится в моем user2759675

+0

. Свойство DataContext определяет, в какой системе объектов будет искать требуемое свойство. Кроме того, если вы не зададите 'DataContext', это приведет к' DataContext' из родительского элемента. Также посмотрите в Debug Output в Visual Studio, все ошибки привязки регистрируются там. –

+1

У меня нет ошибок в моей отладке. Это мой datacontext сейчас DataContext = "{Binding ListLineup, RelativeSource = {RelativeSource Self}}" и Itemssource - это составы, хотя я не понимаю, почему мне приходится ставить линейки как itemssource? По-прежнему не работает – user2759675

0

Вы должны установить ItemsSource, а не DataContext в ItemsControl:

<ItemsControl ItemTemplate="{StaticResource test}" ItemsSource="{Binding ListLineup}">