展开标题绑定不能正确显示值(WPF / C#)

时间:2017-11-22 20:29:08

标签: c# wpf xaml listview data-binding

我使用数据绑定在listview中显示一些数据。我使用标题来sumarize我的数据,我想显示从我的itemsource中提取的文本,但不起作用。这段代码有些错误吗?如何为我的wpf提供正确的数据源?

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 个答案:

答案 0 :(得分:1)

为了在组头中显示值,分组项将在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>