我有一个ItemsControl,里面有另一个ItemsControl。 这意味着,对于父列表中的每个项目,我想显示子列表中的所有项目。
所以Xaml是这样的(我忽略了一些DataTemplate)“
<ItemsControl x:Name="dayPanel" Grid.Column="1">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<ItemsControl x:Name="dayHours" Grid.Row="1" ItemsSource={Binding HourItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
现在在我背后的代码中创建了一个创建日期列表的类,每天都包含一个小时列表。 所以我得到这样的东西:
public WeekPanel()
{
InitializeComponent();
dayPanel.ItemsSource = new Dayx().CreateDays();
}
所以..第一部分,我在代码中定义,工作正常。 但子项ItemsControl不会填充。 我想将它绑定到属性:HourItems 我该怎么做?
修改 好的,问题是HourItems属性被定义为:
Public List<Hour> HourItem {get; set;}
但是当我将其更改为:
时,它才有效public List<Hour> HourItems
{
get { return hourItems; }
set { hourItems = value; }
}
使它有效的区别是什么?
答案 0 :(得分:2)
<ItemsControl x:Name="dayPanel" Grid.Column="1" ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<ItemsControl x:Name="dayHours" Grid.Row="1" ItemsSource={Binding HourItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
public WeekPanel()
{
InitializeComponent();
dayPanel.DataContext = new Dayx().CreateDays();
}
尝试上面的代码。基本上我已经将itemscontrol对象的datacontext设置为数据源,然后ItemsSource从自身获取值,DataContext应该自行传递。
如果失败了,请在调试时查看输出窗口,因为这通常会告诉您某些内容是否无法绑定。
答案 1 :(得分:0)
在ItemsControl
中,尝试使用RelativeSource
:
<ItemsControl x:Name="dayHours" Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource }">
有用的链接: