我刚刚掌握数据绑定,我正在努力绑定到嵌套在对象下方的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);
}
}
我希望我的主窗口有三个部分:
我坚持第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工作正常,然后我想显示下面列出的所有月份日对象DayDate(最多31个,即01周六到31个月)。
它没有显示Day.DayDate!我如何绑定它?
你现在可以看到'Path = Day.DayDate',但我已经尝试了几乎所有可能性让我相信我从错误的角度接近这个。
任何帮助非常感谢
答案 0 :(得分:5)
您的MonthView模板的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}}" />
它应该工作! ;)