Silverlight - привязка дочернего источника ItemsControl к свойству в родительском источнике ItemsControl - PullRequest
1 голос
/ 30 января 2011

У меня есть 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 как мне это сделать?

Edit: Хорошо, проблема была в том, что свойство HourItems было определено как:

Public List<Hour> HourItem {get; set;}

но это сработало, когда я изменил его на:

public List<Hour> HourItems
        {
            get { return hourItems; }
            set { hourItems = value; }
        }

Какая разница, что заставило его работать?

Ответы [ 2 ]

2 голосов
/ 30 января 2011
<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();
}

Попробуйте этот код выше.По сути, я установил datacontext вашего объекта itemscontrol в ваш источник данных, затем ItemsSource берет значение из себя, а DataContext должен передать его самому себе.это обычно говорит вам, если что-то не связывает.

0 голосов
/ 30 января 2011

В вашем ItemsControl попробуйте использовать RelativeSource:

<ItemsControl x:Name="dayHours" Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource }">

Полезные ссылки:

...