我正在尝试根据对象列表的项目创建数据网格。
我有以下课程:
class BookCopies
{
private string bookTitle;
private int bookNumbers;
public string BookTitle
{
get;
set;
}
public int BookNumbers
{
get;
set;
}
}
然后我用这种类型的项目填充经典列表
List<BookCopies> booksWithCopies = new List<BookCopies>();
//...
return booksWithCopies;
基本上这个列表将包含诸如(&#34;汤姆索亚历险记&#34;,3),(&#34;无限玩笑&#34;,8)之类的项目......它保留了一本书标题和书店的书籍数量。
我知道必须将此列表转换为ObservableCollection并引发NotifyPropertyChanged才能获得mvvm模式。
现在我正在尝试的是使用此书列表来设置网格视图的内容。因此,书名成为列标题,并在其下方拥有书籍数量。基本上网格看起来像这样:
大多数硬编码列标题的示例,现在我尝试从列表中读取它,并且还从同一列表中绑定网格的内容。
我对WPF和MVVM都很陌生,首先我想是否有可能(因为我已经在列表中已经拥有了所有数据,这将是很好的)如果可以的话给我一些例子,或者告诉我一些关于如何实现这个的例子。
答案 0 :(得分:0)
您无法实现您的目标,因为DataGrid不会以这种方式工作。 DataGrid(itemsource)上的有界集合用于填充DataGrid的行。
然而,还有其他人试图做同样的事情。看一下WPF horizontal DataGrid,结果与你描述的类似(左边的列名除外)。由此产生的解决方案需要一些编码。
您可以查看的另一个资源是Code Project网站的Displaying vertical rows in a DataGrid。
答案 1 :(得分:0)
<DataGrid x:Name="Dgrd" HeadersVisibility="Row" VerticalGridLinesBrush="LawnGreen" CanUserAddRows="False">
<DataGrid.Resources>
<Style TargetType="DataGridRowHeader">
<Setter Property="BorderBrush" Value="DarkViolet"/>
<Setter Property="BorderThickness" Value="1"/>
</Style>
<Style TargetType="DataGridCellsPresenter">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCellsPresenter">
<StackPanel>
<Label Padding="5" Content="{Binding BookTitle}" BorderThickness="0 0 0 1" FontWeight="Bold" BorderBrush="DarkViolet" Background="Transparent"/>
<TextBlock Padding="5" Text="{Binding BookNumbers}"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
<DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<DataGridRowsPresenter Orientation="Horizontal" />
</ItemsPanelTemplate>
</DataGrid.ItemsPanel>
</DataGrid>