0

最後の列が独自のセルテンプレートを持つコレクションであるアイテムのコレクションがあります。ListView のアイテム ソースはコードで動的に設定され、他のすべての列は正しくレンダリングされます。ただし、最後の列のデータはまったく読み取られていません。他の質問とは異なる解決策を試しましたが、うまくいかないようです。

    <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>
4

1 に答える 1

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>

アイテム全体のテンプレートを変更する代わりに、 を使用してテキストを表示する 1 つの列を作成しますSkillTemplate。ただし、私が見る限り、それを使用してやりたいことについては、ユーザーに選択オプションを与えずに多数のアイテムを表示したい場合ListBoxでも、それほど複雑ではないコントロールを使用することを検討してください。ItemsControl

<DataTemplate x:Key="SkillsTemplate">
   <ItemsControl ItemsSource="{Binding Path=Skills}" ItemTemplate="{StaticResource SkillTemplate}"/>
</DataTemplate>
于 2013-08-15T09:23:27.313 に答える