2011-07-07 7 views
3

Je suis en train de m'attaquer à la liaison de données, je suis aux prises avec des propriétés imbriquées dans une ObservableCollection plus bas dans l'objet, à savoir dans un DataTemplate d'une ListView que j'essaye de lier au Day.DayDate propriété ci-dessous.Liaison de liaison pour les objets imbriqués

Son une application de journal & c'est sa structure (sous la direction de le garder bref):

public class Month : INotifyPropertyChanged 
{ 
    public DateTime StartDate { get; set; } 
    public ObservableCollection<Day> Days { get; set; } 
} 

public class Day : INotifyPropertyChanged 
{ 
    public DateTime DayDate { get; set; } 
    public ObservableCollection<Gig> Gigs { get; set; } 
} 

public class Gig : INotifyPropertyChanged 
{ 
    // Properties of a gig 
} 

Je POPULATE d'abord les mois des jours comme ça:

private void InitMonth(Month calendarMonth) 
{ 
    // create a Day Object for each day of month, create a gig for each booking on that day (done in LoadDay) 
    int daysInMonth = DateTime.DaysInMonth(calendarMonth.StartDate.Year, calendarMonth.StartDate.Month); 
    Day dc; 
    for (int day_cnt = 0; day_cnt < daysInMonth; day_cnt++) 
    { 
     dc = new Day(); 
     dc.DayDate = calendarMonth.StartDate.AddDays(day_cnt); 
     calendarMonth.Day.Add(dc); 
    } 
} 

Je veux que ma fenêtre principale pour avoir trois sections:

  1. mois ListeVue (montrant tous ses Jours)
  2. jour ListView (montrant sélectionné Jours Gigs)
  3. Content Control (montrant certaines propriétés des concerts CONCERTS)

Im coincé sur la partie 1, Mon Xaml ressemble à ceci:

<StackPanel> 
    <TextBlock Text="{Binding Path=StartDate, StringFormat={}{0:MMMM}}"/>// Month Heading 
    <ListView Name="lv_month" 
    ItemsSource="{Binding}" 
    ItemTemplate="{StaticResource dayItem}">// Each Day in Month 
    </ListView> 
</StackPanel> 

<DataTemplate x:Key="dayItem"> 
    <StackPanel> 
    <TextBlock Text="{Binding Path=Day.DayDate, StringFormat={}{0:dd ddd}}" /> 
    </StackPanel> 
</DataTemplate> 

Dans le TextBlock , Liaison aux mois StartDate fonctionne très bien, puis je veux montrer tous les mois Day Objects Objets DayDate (jusqu'à 31, c'est-à-dire 01 Sat à 31 Lun) énumérés ci-dessous.

Ce n'est pas le jour Jour.Date! Comment me lier à lui?

Vous pouvez voir en ce moment 'Path = Day.DayDate' mais j'ai essayé à peu près toutes les possibilités qui me porte à croire que j'aborde cela sous un mauvais angle.

Toute aide grandement appréciée

Répondre

5

Votre ItemsSource de ListView de votre modèle de mois doit se lier aux Jours:

changement

ItemsSource="{Binding}" 

à

ItemsSource="{Binding Days}" 

Deuxièmement, pensez chaque modèle comme la manipulation de cet objet, alors changez ceci:

<TextBlock Text="{Binding Path=Day.DayDate, StringFormat={}{0:dd ddd}}" /> 

Pour

<TextBlock Text="{Binding Path=DayDate, StringFormat={}{0:dd ddd}}" /> 

Et cela devrait fonctionner! ;)

+0

Génial! Cela l'a fait, merci beaucoup, donc {Binding Days} est l'équivalent de {Binding Path = Days} - L'objet dans l'objet Month auquel je souhaite me lier, je l'ai maintenant. –

Questions connexes