我刚刚开始掌握数据绑定(bind),我正在努力绑定(bind)到嵌套在对象下方的 ObservableCollection 中的属性,即在 ListView 的 DataTemplate 中,我试图绑定(bind)到下面的 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);
}
}
我希望我的主窗口包含三个部分:
- Month ListView(显示所有天数)
- Day ListView(显示选定的 Days Gigs)
- 内容控制(显示选定的演出属性)
我停留在第 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 中,绑定(bind)到 Months StartDate 工作正常,然后我想显示下面列出的所有 Months Day 对象 DayDate(最多 31,即 01 Sat 到 31 Mon)。
它没有显示 Day.DayDate!我如何绑定(bind)它?
你现在可以看到“Path=Day.DayDate”,但我已经尝试了几乎所有的可能性,这让我相信我是从错误的角度来处理这个问题的。
非常感谢任何帮助
最佳答案
您的 Month 模板的 ListView 的 ItemsSource 需要绑定(bind)到 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}}" />
它应该可以工作! ;)
关于wpf - 嵌套对象的绑定(bind)路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610453/