在WPF中,我使用的是MVVM模型。
我有一个带有Dockpanel的视图,我想为通过Binding找到的所有Harddisks动态添加带有Label和TextBox的StackPanels。
因此我的XAML看起来像:
<DockPanel Grid.Row="1" HorizontalAlignment="Stretch" Margin="5">
<ItemsControl ItemsSource="{Binding Harddisks}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel DockPanel.Dock="Right" HorizontalAlignment="Right" Margin="2.5,0,0,0">
<Label Content="{Binding Path=Label}" />
<TextBox Text="{Binding Path=GB_Free}" Width="100" IsReadOnly="True"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
它应该是四个标签和文本框,但只显示第一个Label和TextBox。 为什么呢?
答案 0 :(得分:4)
您的ItemsControl中的项目实际上并不是DockPanel的直接子项。您需要更改ItemsControl以指定DockPanel是Panel。以下将导致ItemsControl创建一个DockPanel并将所有项放在其中(而不是ItemsControl默认使用的StackPanel)。
更多信息:MSDN: ItemsControl.ItemsPanel Property
<ItemsControl ItemsSource="{Binding Harddisks}">
<ItemsControl.ItemsPanel>
<DockPanel Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" />
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel DockPanel.Dock="Right" HorizontalAlignment="Right" Margin="2.5,0,0,0">
<Label Content="{Binding Path=Label}" />
<TextBox Text="{Binding Path=GB_Free}" Width="100" IsReadOnly="True"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>