将listview绑定到集合....动态的

时间:2012-08-06 19:49:49

标签: c# .net wpf xaml

WPF世界的新手,需要实现动态列视图。

我可以在概念上可视化这个想法,但我无法将其变成一个实现。

StackPanel - > ListView - >文本框。

整个想法是将配置文件显示为所选实体的列,基于所选实体,配置文件可以更改,因此我希望将配置文件显示为动态列。 个人资料将有54个项目,可以垂直表示为文本框。

因此,如果我有一个代表配置文件项目(54项)的可观察集合,则绑定到垂直加载到列表视图中的用户控件和用户控件时。

因此,添加的每个配置文件将在堆栈面板上水平添加,因此我可以将所有配置文件作为动态列。

关于我如何通过xaml实现这一点的任何想法或指示,以及我的模型对象应该如何?

希望我能正确理解我的想法:)

**添加了一个非常快速的手绘草图。

列col1..col2 .....理想情况下是一个集合,其中包含要在列中的矩形框表示的文本框中显示的数据。

每个柱子都可以变化。

所以我从我的服务中获得的数据最理想的是Collection of Collection。

所以第一个集合包含Col1..Col2..Col3 ... items ...

起初认为这听起来非常像网格,但数据模型不适合网格显示样式。

每个Col1..col2..col3都在第一个集合中作为另一个集合。enter image description here

1 个答案:

答案 0 :(得分:0)

我已经设法解决了上面要求的数据布局和显示问题,感谢SO和各种答案的混合搭配让我得到了这个。

因此,下面的XAML会水平创建任意数量的列表项。

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel Height="301"  HorizontalAlignment="Left" Margin="37,42,0,0" Name="stackPanel1" 
                VerticalAlignment="Top" Width="795">
        <StackPanel.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="Black" Offset="0" />
                <GradientStop Color="White" Offset="1" />
                <GradientStop Color="Silver" Offset="0.006" />
            </LinearGradientBrush>
        </StackPanel.Background>

        <ItemsControl x:Name="tStack" Grid.Column="0" ItemsSource="{Binding Profiles}" >
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Left">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Button Grid.Row="0" Content="{Binding Name}"/>
                        <ListBox Grid.Row="1" Height="209" Name="listBox1" Width="98" HorizontalAlignment="Left"
                            ItemsSource="{Binding Path=Profile, Mode=TwoWay}"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Grid>