2017-11-22 23 views
0

データバインディングを使用して、一部のデータをlistviewに表示しています。私は私のデータをsumarizeするためにヘッダーを使用しています、私は私のitemsourceから抽出されたテキストを表示したいが、うまくいきません。このコード部分には何らかの間違いがありますか?私はどのように私のwpfに正しいデータソースを提供できますか? 展開ヘッダーのバインディングで値が正しく表示されない(WPF/C#)

Main.xml私はStructLog.csクラスで自分のリストを記入し、WPFに私は、リストの各項目のデータを示しています。他の値は正常に動作し、ヘッダーが作成され、ヘッダーエキスパンダー上のテキストは表示されません。

Main.xml

List<StructLog> all = new List<StructLog>(); 
    foreach (ObservableCollection<StructLog> res in Patterns.Results) 
    { 
     foreach (StructLog r in res) 
     { 
      all.Add(r); 
     } 
    } 

    lstResults.ItemsSource = all; 

    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(all); 
    PropertyGroupDescription groupDescription = new PropertyGroupDescription("Pattern"); 
    view.GroupDescriptions.Add(groupDescription); 

StructLog.cs

public class StructLog 
{ 
    public int LineNumber{ get; set;} 
    public string LineLog{ get; set;} 
    public DateTime Time{ get; set;} 
    public string Source{ get; set;} 
    public string Type{ get; set;} 
    public string Pattern{ get; set;} 

    public StructLog(StructLine s,string patternName) 
    { 
     this.LineNumber = s.LineNumber; 
     this.LineLog = s.LineLog; 
     this.Time = s.Time; 
     this.Source = s.Source; 
     this.Type = s.Type; 
     this.Pattern = patternName; 
    } 

} 

Window.xaml

<ListView Name="lstResults" Grid.Row="1" IsEnabled="True" Grid.RowSpan="4" DataContext="Results" Grid.ColumnSpan="5" Margin="5,5"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Linha" Width="Auto" DisplayMemberBinding="{Binding LineNumber}" /> 
      <GridViewColumn Header="Fonte" Width="Auto" DisplayMemberBinding="{Binding Source}" /> 
      <GridViewColumn Header="Data" Width="Auto" DisplayMemberBinding="{Binding Time}" /> 
      <GridViewColumn Header="Log" Width="Auto" DisplayMemberBinding="{Binding LineLog}" /> 
     </GridView> 
    </ListView.View> 

    <ListView.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.ContainerStyle> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Expander IsExpanded="True"> 
            <Expander.Header> 
             <StackPanel Orientation="Horizontal"> 
              <TextBlock Text="Teste:" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" /> 
              <TextBlock Text="{Binding Pattern}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" /> 
             </StackPanel> 
            </Expander.Header> 
            <ItemsPresenter /> 
           </Expander> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </GroupStyle.ContainerStyle> 
     </GroupStyle> 
    </ListView.GroupStyle> 
</ListView> 

答えて

1

DISのためにグループヘッダーに値を再生すると、GroupItemクラスのItemsプロパティにグループ化されたアイテムが表示されます。したがって、Text = "{Binding Items [0]。Pattern"}のようなバインディングを行うことができます。グループ内のすべての値は、値がPatternプロパティでグループ化されるのと同じになるため、グループの最初の項目の値がバインドされます。

これを試してください。

<ListView.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.ContainerStyle> 
      <Style TargetType="{x:Type GroupItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <Expander IsExpanded="True"> 
           <Expander.Header> 
            <StackPanel Orientation="Horizontal"> 
             <TextBlock Text="Teste:" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" /> 
             <TextBlock Text="{Binding Items[0].Pattern}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" /> 
            </StackPanel> 
           </Expander.Header> 
           <ItemsPresenter /> 
          </Expander> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</ListView.GroupStyle> 
関連する問題