2011-01-30 99 views
1

我有一個ItemsControl,它有另一個ItemsControl。 這意味着,對於父列表中的每個項目,我想要顯示子列表中的所有項目。Silverlight - 將子項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沒有得到填充 我想。將其綁定到屬性:H我的項目 我該怎麼做?

編輯: 好的,但問題是,HourItems財產被定義爲:

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

,但它工作時,我把它改爲:

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

那是什麼使得它的區別工作?

+0

就我所能看到的唯一區別是拼寫。這是一個錯字嗎? – 2011-01-30 10:42:44

+0

除了一個錯字(`HourItem`與`HourItems`),​​唯一的區別是一個是自動屬性,而另一個是有支持(希望是私人)成員的常規屬性。 – froeschli 2011-01-30 10:49:40

+0

那麼爲什麼汽車財產不起作用? – Notter 2011-01-30 10:54:59

回答

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應該自行傳遞下去。

如果失敗,請在調試時查看輸出窗口,因爲它通常會告訴您是否有某個綁定失敗。

相關問題