2013-08-15 2 views
0

У меня есть коллекция элементов, в которой последний столбец представляет собой коллекцию с собственным шаблоном celltemplate. Источник элемента ListView задается динамически в коде, а все остальные столбцы корректно отображаются. Однако данные последнего столбца не читаются вообще. Я пробовал разные решения из других вопросов, но они, похоже, не работают для меня.Связывание коллекции для отображения в gridviewcolumn с помощью celltemplate

<Window x:Class="bbowl.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase" 
     Title="Blood Bowl Data" Height="350" Width="525"> 
    <Window.Resources> 
     <DataTemplate x:Key="SkillTemplate"> 
      <TextBlock Text="{Binding Path=name}" ToolTip="{Binding Path=description}" Height="18" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="Blue"><TextBlock.TextDecorations><TextDecoration /></TextBlock.TextDecorations></TextBlock> 
     </DataTemplate> 
     <DataTemplate x:Key="SkillsTemplate"> 
      <DataGrid AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Left" VerticalAlignment="Top" HeadersVisibility="None" HorizontalScrollBarVisibility="Hidden" ItemsSource="{Binding Path=Skills}" BorderThickness="0" ItemTemplate="{StaticResource SkillTemplate}" /> 
     </DataTemplate> 

    </Window.Resources> 
    <Grid> 
     <ComboBox HorizontalAlignment="Left" Name="cbxRace" VerticalAlignment="Top" Width="503" Height="25" SelectionChanged="cbxRace_SelectionChanged" ItemsSource="{Binding}" /> 
     <Label Content="Rerolls:" Height="25" HorizontalAlignment="Left" Margin="0,25,0,0" Name="lblRerollLabel" VerticalAlignment="Top" Width="435" HorizontalContentAlignment="Right" FontWeight="Bold" /> 
     <Label Content="0" Height="25" HorizontalAlignment="Left" Margin="441,25,0,0" Name="lblReroll" VerticalAlignment="Top" Width="62" HorizontalContentAlignment="Right" /> 
     <ListView Height="263" HorizontalAlignment="Left" Margin="0,48,0,0" Name="lvwPlayer" VerticalAlignment="Top" Width="503" ItemsSource="{Binding}"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=name}"/> 
        <GridViewColumn Header="MA" DisplayMemberBinding="{Binding Path=ma}" /> 
        <GridViewColumn Header="ST" DisplayMemberBinding="{Binding Path=st}" /> 
        <GridViewColumn Header="AG" DisplayMemberBinding="{Binding Path=ag}" /> 
        <GridViewColumn Header="Max" DisplayMemberBinding="{Binding Path=max}" /> 
        <GridViewColumn Header="Price" DisplayMemberBinding="{Binding Path=price}" /> 
        <GridViewColumn Header="Skills" CellTemplate="{StaticResource SkillsTemplate}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</Window> 
+0

Как насчет установки 'DataGrid' в' '' AutoGenerateColumns = "True" '? Похоже, что ваш 'DataGrid' нуждается в ручном добавлении столбцов, если' AutoGenerateColumns = "False" '. –

ответ

1

Чтобы решить проблему, вы должны изменить SkillsTemplate на что-то вроде этого:

<DataTemplate x:Key="SkillsTemplate"> 
    <DataGrid 
     AutoGenerateColumns="False" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     HeadersVisibility="None" 
     ItemsSource="{Binding Path=Skills}" 
     BorderThickness="0" 
     GridLinesVisibility="None"> 
     <DataGrid.Columns> 
     <DataGridTemplateColumn CellTemplate="{StaticResource SkillTemplate}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</DataTemplate> 

, который вместо того, чтобы изменить весь шаблон пунктов создает один столбец, который отображает текст с помощью SkillTemplate. Однако, насколько я могу видеть, что вы хотите сделать с этим вы можете рассмотреть возможность использования менее сложного управления, как ListBox или даже ItemsControl, когда вы просто хотите отобразить кучу вещей, не давая разрешения пользователю выбрать один

<DataTemplate x:Key="SkillsTemplate"> 
    <ItemsControl ItemsSource="{Binding Path=Skills}" ItemTemplate="{StaticResource SkillTemplate}"/> 
</DataTemplate> 
Смежные вопросы