c# - ListView 项目不清除 (C#/WPF)

标签 c# .net wpf listview

我有一个listView显示我的元素。显示值的过程工作得很好,我没有发现问题,但是当我尝试使用新值更新列表时,我需要清理此列表以再次显示新值。我尝试过像lstResults.Items.Clear()这样的方法不工作。有正确的方法来进行此操作吗?

更新.cs

    List<StructLog> All = new List<StructLog>();
    if (lstResults.Items.Count > 0)
    {
        lstResults.DataContext = null;
        lstResults.ItemsSource = null;
        AllowUIToUpdate();
    }

    foreach (IPattern p in Patterns.GetAvailablePatterns())
    {
        p.Start();
        Patterns.Results.Add(p.Result());
    }

    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);

MainWindow.xaml

<ListView Name="lstResults" Grid.Row="1" IsEnabled="True" Grid.RowSpan="4" DataContext="All" 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="{Binding Items[0].Pattern, StringFormat={} Teste: {0}}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" />
                                            <Border CornerRadius="10" Padding="1,1,1,1" BorderThickness="1" BorderBrush="Black" Background="Red" Margin="1,0,0,0" >
                                                <TextBlock Text="{Binding Items.Count,StringFormat={} Items: {0}}" Padding="0" VerticalAlignment="Center"  Margin="5,1,5,1" FontSize="15" FontWeight="Bold" Foreground="Black"/>                                                        
                                            </Border>
                                        </StackPanel>
                                    </Expander.Header>
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

编辑 1

当我使用方法Clear时对于 List<StructLog> All = new List<StructLog>(); 列表很干净,但它仍然是一个意外的标题,如图像 1

所示

Error using clear

最佳答案

您无法修改ItemsControl.Items使用 ItemsControl.ItemsSource 时的集合。要清理 ListView,您只需将 ItemsSource 设置为 null,或者您可以替换 List<StructLog>ObservableCollection<StructLog> 。之后您可以调用ObservableCollection.Clear方法。

关于c# - ListView 项目不清除 (C#/WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455076/

相关文章:

javascript - POST 调用以对前端应用程序的用户进行身份验证

C# .NET 包含文件

c# - WPF:当应用程序处于非事件状态时创建屏幕保护程序功能?

c# - 调用另一个线程函数然后返回值

c# - 如何从不同的线程更新命令的 "CanExecute"值?

c# - 异步 CTP,单元测试 ViewModel 的异步方法

c# - 修改已设置的 mock 属性

c# - 在 WPF 中使用数据绑定(bind)刷新 UI

c# - 自定义类列表上的 Linq

asp.net - Visual Studio 2013在现有项目上更改身份验证