ItemsControl中DataGrid的列绑定

时间:2019-04-06 17:42:28

标签: c# wpf xaml itemscontrol

我正在尝试使用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设置一种样式)?

0 个答案:

没有答案