Binding Path для вложенных объектов - PullRequest
3 голосов
/ 07 июля 2011

Я только начинаю разбираться со связыванием данных, я борюсь со связыванием со свойствами, которые вложены в ObservableCollection дальше вниз по объекту, а именно в DataTemplate ListView, который я пытаюсь привязать к свойству Day.DayDate ниже.

Это приложение для дневников, и это его структура (отредактированная для краткости):

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
}

Я изначально заполняю Дни месяцев следующим образом:

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);
    }
}

Я хочуВ моем главном окне три секции:

  1. Месяц ListView (показывает все его дни)
  2. Day ListView (показывает выбранные дни Gigs)
  3. Контент-контроль (показывает выбранныеСвойства концертов)

Я застрял на части 1, Мой Xaml выглядит следующим образом:

<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>

В TextBlock, Привязка к месяцам StartDate работает нормально, тогда я хочупоказать все объекты Daysate за месяцы DayDate (до 31, т.е. с 01 Sat до 31 Mon), перечисленные ниже.

Не отображается Day.DayDate!Как мне привязаться к нему?

В данный момент вы можете видеть 'Path = Day.DayDate', но я попробовал практически все возможности, которые заставляют меня поверить, что я подхожу к этому с неправильной точки зрения.

Любая помощь с благодарностью

1 Ответ

5 голосов
/ 07 июля 2011

Ваш ItemsSource для ListView вашего Месяца должен привязаться к Дням:

Изменить

ItemsSource="{Binding}"

на

ItemsSource="{Binding Days}"

Во-вторых, рассмотрите каждый шаблон какобрабатывая этот объект, измените это:

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

На

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

И это должно работать!;)

...