3

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>

4 つの Label と TextBox が必要ですが、最初の Label と TextBox のみが表示されます。なんで?

4

1 に答える 1

5

ItemsControl 内の項目は、実際には DockPanel の直接の子ではありません。DockPanel が Panel であることを指定するには、ItemsControl を変更する必要があります。次の例では、ItemsControl が DockPanel を作成し、その中にすべての項目を配置します (ItemsControl が既定で使用する StackPanel ではありません)。

詳細情報: MSDN: ItemsControl.ItemsPanel プロパティ

   <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>
于 2013-01-29T17:30:56.880 に答える