动态绘制网格xaml c#

时间:2014-04-15 10:28:14

标签: c# wpf xaml gridview grid

我想在xaml中有一个网格可以向我展示一个对象的集合我应该如何进行?

我已将这些绑定:

C# // Collection.DataContext = Mycollection;

xaml // Grid.RowSpan="{Binding getSizeofcollection}"

我的收藏包含所有相同类型的对象。 我想显示1个对象/行

是否可以创建一个如何在一行中显示对象然后在网格中使用它的模板?

感谢您的建议

编辑: 实际上我无法绑定到哈希表,但我可以绑定到List 这是我的问题的根源。现在我正在尝试在List

中转换我的哈希表

编辑n°2:好的我正确地将哈希表转换为列表,但是这个xamlparse异常仍在这里

3 个答案:

答案 0 :(得分:2)

Grid是布局容器,而不是控件。您想使用DataGrid,这样您就可以将ItemsSource设置为Mycollection。然后,您可以让它为您创建列,或者您可以控制并专门定义您想要的列以及它们的显示方式。

答案 1 :(得分:1)

对不起,我发现你的问题对于你要求的内容有点不清楚。

根据您的评论here

  

我有一个相同对象的列表,我希望每个对象及其属性在DataGrid / StackPanel的一行或者其他东西,所以,20个对象,20行,每个属性的一个列

听起来你只想要一个DataGrid。

<DataGrid x:Name="Collection" ItemsSource="{Binding }" />

DataGrid的默认行为是为每个项目创建一个行,并为项目的每个属性自动生成一个列。因此,如果列表中有20个MyClass类型的对象,并且每个对象包含3个属性,它将自动生成一个包含20行和3列的网格。

但是,如果我误解了您并且您实际上想要创建一个包含所有项目的水平StackPanel,并且您不需要DataGrid提供的选择/排序功能,我&# 39;建议改为使用ItemsControl

这只是一个将遍历集合的控件,并使用您指定的任何模板绘制集合中的每个项目。所有项目都包含在<ContentPresenter>中,并放置在您指定的任何布局容器中(默认为垂直StackPanel)。

由于您说您想要所有项目都在水平线上,因此最好的ItemsPanelTemplate可能是StackPanel,其方向设置为Horizontal

你的XAML最终看起来像这样:

<ItemsControl x:Name="Collection" ItemsSource="{Binding }">
    <!-- ItemsPanelTemplate -->
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <!-- ItemTemplate -->
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <!-- // put whatever XAML you want to use to draw each item here -->
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

答案 2 :(得分:0)

您可以使用一些自定义的AttachedProperty。

这样的事情:

<Grid Grid.Row="1"
              commonUI:GridExtension.ItemsSource="{Binding ItemsSource}"
              commonUI:GridExtension.Rows="{Binding RowDefinitions}"
              commonUI:GridExtension.Columns="{Binding ColumnDefinitions}"/>

文档:http://msdn.microsoft.com/en-us/library/ms749011(v=vs.110).aspx

但在你的情况下,一个简单的ListBox或ItemsControl似乎更合适......