我正在尝试使用WPF为我的Pen&Paper组创建一个自定义CharacterSheet-Generator,但是在正确使用DataGrid时遇到了一些问题。
每个技能类别(例如工艺或知识)都应有自己的名称框和一个包含该类别所有技能的数据网格。盒子应该垂直堆放。
我尝试使用ItemsControl来实现这一点,如下所示:
<ItemsControl Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=SkillList, Mode=TwoWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel HorizontalAlignment="Left"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" FontSize="16" FontWeight="Black" Text="{Binding Name}"/>
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl >
<DataGrid Grid.Row="1" ItemsSource="{Binding Skills}" GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="DarkGray" RowHeaderWidth="0" Background="White" BorderThickness="0" ColumnHeaderHeight="0">
<!--<DataGridTextColumn Binding="{Binding Name}" CellStyle="{StaticResource SkillGridCellStyle}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Requirement}" CellStyle="{StaticResource SkillGridCellStyle}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Value}" CellStyle="{StaticResource SkillGridCellStyle}" IsReadOnly="True"/>-->
</DataGrid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
SkillList包含一个SkillCategoryModels列表,如下所示:
public class SkillGroupModel : NotifyBase
{
public string Name
{
get { return Get<string>(); }
set { Set(value); }
}
public int Group
{
get { return Get<int>(); }
set { Set(value); }
}
public List<SkillModel> Skills
{
get { return Get<List<SkillModel>>(); }
set { Set(value); }
}
}
每个类别都有一个SkillModels列表,其中包含名称,值,成本等属性。将我的DataGrid的ItemsSource绑定到Skills-List可以工作,但是我的列需要不同的样式。但是,在我的代码的注释掉的部分中使用“列”出价会引发此异常:
System.Windows.Markup.XamlParseException :使用ItemsSource时该操作无效。改用ItemsControl.ItemsSource访问和修改项目。
在这里使用自定义样式的DataGridColumns的正确方法是什么(每个列需要不同的样式,所以我不能只为整个ItemsControl设置一种样式)?