Silverlight - 将子ItemsControl源绑定到父ItemsControl源中的属性

时间:2011-01-30 07:47:19

标签: c# silverlight data-binding itemscontrol

我有一个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; }
        }

使它有效的区别是什么?

2 个答案:

答案 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 }">

有用的链接: