2014-03-19 58 views
0

我想要一個ListBox的DataTemplate具有ItemsSource作爲邊框集合。在每個邊框內,我想顯示另一個ListBox,包含一些具有自己ItemsSource的項目。 但是,當我嘗試實現這種結構時,我無法填充任何數據。DataTemplate可以放在另一個不同模板結構的DataTemplate中嗎?

我的XAML代碼 -

<Grid x:Name="RightPanel" Grid.Column="2" Background="Beige"> 
      <Border BorderBrush="Black" Margin="4" BorderThickness="1.5"> 
        <ScrollViewer Margin="2" Focusable="False"> 
        <ListBox x:Name="MainRightListBox" ItemsSource="{Binding ListBoxCollection,Mode=TwoWay}"> 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <ListBox x:Name="ChildListBox" ItemsSource="{Binding CurrentPage.ClonedVectorImages,Mode=TwoWay}" SelectedItem="{Binding ImageVectorSelected}" BorderBrush="Transparent" Background="Transparent"> 
            <ListBox.ItemTemplate> 
             <DataTemplate> 
              <StackPanel x:Name="canvas" Background="Transparent" Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}}"> 
               <StackPanel.ContextMenu> 
                <ContextMenu> 
                 <MenuItem Header="Delete" CommandParameter="{Binding}" 
                Command="{Binding PlacementTarget.Tag.DataContext.DeleteCloneCommand, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}, Mode=FindAncestor}}"/> 
                </ContextMenu> 
               </StackPanel.ContextMenu> 
               <Viewbox Width="35" Height="35" > 
                <Canvas Width="35" Height="35"> 
                 <Canvas> 
                  <Path Fill="#ffda2526" Data="F1 M 0.000,112.500 C 0.000,50.369 50.368,0.000 112.500,0.000 C 174.632,0.000 225.000,50.369 225.000,112.500 C 225.000,174.633 174.632,225.000 112.500,225.000 C 50.368,225.000 0.000,174.633 0.000,112.500 Z" Height="30.667" Stretch="Fill" Width="31"/> 
                  <TextBlock x:Name="tb1" Text="{Binding CountId}" Foreground="WhiteSmoke" FontSize="20" FontFamily="Arial Bold" Height="20" RenderTransformOrigin="1.588,1.224" Canvas.Left="9.322" Canvas.Top="3.335"></TextBlock> 
                 </Canvas> 
                </Canvas> 
               </Viewbox> 

               <TextBox Text="Enter Text Here" Height="20" VerticalAlignment="Center"/> 
              </StackPanel> 
             </DataTemplate> 
            </ListBox.ItemTemplate> 
           </ListBox> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
        </ListBox> 

       </ScrollViewer> 
      </Border> 
     </Grid> 

回答

0

「?可以一個DataTemplate放在不同的模板結構的另一DataTemplate中內部」

答案是肯定的,就可以了。你的XAML結構很好。

但是可能出現的錯誤是使用了綁定路徑/表達式。您需要知道(DataTemplate中的一個)的DataContext對應的項目ListBoxCollection。因此,如果之前提到項目擁有財產CurrentPage.ClonedVectorImages,結合這種方式應該正常工作來填充內ListBox

<ListBox x:Name="ChildListBox" 
     ItemsSource="{Binding CurrentPage.ClonedVectorImages,Mode=TwoWay}" 
     ........> 
+0

我創建ListBoxCollection只是爲了給我的外部列表框一些ItemSource,所以ListBoxCollection只是動態創建的邊框的集合。在這些單獨的邊界內,我想放置InnerListbox項目。所以我的視圖是這樣的 - 邊框1(listboxItem1,listBoxItem2,....)邊框2(listBoxItem3,.....)邊框3(...),.....我可以實現這個視圖從相同的XAML結構體? – user3364004

+0

如果我正確理解你的評論,我認爲你不能。您當前的XAML標記意味着,每個邊框都會有一個ListBox填充ListBoxItems。這是錯誤的方法,如果你想直接在邊框內有ListBoxItems,並且這些ListBoxItems在邊框內是連續的。 – har07

+0

好吧。你可以提出任何其他方式或從哪裏例如我可以看到如何創建相同的看法,我已經提到過嗎? – user3364004

0

你需要把DataTemplates資源與相應的按鍵,否則可能會出現異常:

Markup.IStyle.Connector.Connect錯誤

這是工作室的錯誤,這描述如下link

來看待這個問題的好辦法「模板像括號,括號引用」不創建模板XAML,但保存並在以後執行。錯誤是:我們有嵌套括號的問題。

無論如何,我認爲,應避免嵌套模板和通過資源使用他,它會更容易和更清晰。

相關問題