3

データバインディングを理解し始めたばかりです。オブジェクトのさらに下にあるObservableCollection内にネストされているプロパティへのバインドに苦労しています。つまり、ListViewのDataTemplateで、以下の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);
    }
}

メインウィンドウに3つのセクションを持たせたい:

  1. 月のListView(すべての日を表示)
  2. Day ListView(選択したDays 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で、Months StartDateへのバインドは正常に機能します。次に、その下にリストされているすべてのMonths DayオブジェクトDayDate(31まで、つまり01Satから31Monまで)を表示します。

Day.DayDateが表示されていません!どうすればそれにバインドできますか?

現時点では「Path=Day.DayDate」を見ることができますが、私はこれに間違った角度からアプローチしていると信じる可能性をほぼすべて試しました。

どんな助けでも大歓迎

4

1 に答える 1

5

MonthテンプレートのListViewのItemsSourceは、Daysにバインドする必要があります。

変化する

ItemsSource="{Binding}"

ItemsSource="{Binding Days}"

次に、各テンプレートをそのオブジェクトを処理するものと見なすため、次のように変更します。

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

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

そしてそれはうまくいくはずです!;)

于 2011-07-07T12:33:03.860 に答える