C# GridView中有限制吗?

C# GridView中有限制吗?,c#,wpf,mvvm,C#,Wpf,Mvvm,Sitrep:我有一个列表视图/网格视图,采用半组装MVVM样式的设置。 我有一个存储数据的自定义对象。在OberservableCollection中 在notify属性更改事件触发之前,一切看起来都很好,然后整个应用程序似乎都冻结了 注:此可观测集合中约有24000项 这是代码 标准通知属性已更改 public class ObservableObject : INotifyPropertyChanged { public event PropertyChan

Sitrep:我有一个列表视图/网格视图,采用半组装MVVM样式的设置。 我有一个存储数据的自定义对象。在OberservableCollection中

在notify属性更改事件触发之前,一切看起来都很好,然后整个应用程序似乎都冻结了

注:此可观测集合中约有24000项

这是代码

标准通知属性已更改

    public class ObservableObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(Object PropertyValue, Object PropertyName = null)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyValue.ToString()));

            }
    }
视图模型:

 public ObservableCollection<ObjectModel.EventEntry> EventViewerDisplayData { get; set; } //Property bound to view
 public void DelegatedChangeLog(Object Parameters)
        {
            EventViewerDisplayData = new ObservableCollection<ObjectModel.EventEntry>(new EventViewerMode(Paramters.ToString()); //Evaluates and data gets stored
            NotifyPropertyChanged("EventViewerDisplayData"); //Program Freezes
        }

发布您的XAML代码。首先,为什么要覆盖ListView的模板?默认情况下,第二个UI虚拟化在ListView上启用,但一旦您对其进行分组,UI虚拟化就消失了。因此,您的GUI会被冻结,因为所有容器都是在listView加载时生成的。因此我不能在listView上使用分组?如果您使用WPF 4.5,则可以在listView上设置
virtualzingPanel.isvirtualzingwengrouping=True
,它会工作。此外,您不必重写ListView的
ControlTemplate
。此外,我在您的ItemsSource
EventViewerDisplayData
中没有看到任何分组。那么,您在哪个属性上分组呢?我的项目是针对4.5.1的,我在XAML或C#中找不到这个属性。请告知。
<ListView ItemsSource="{Binding EventViewerDisplayData}" DataContext="{Binding EventViewerContext}" Style="{StaticResource GroupedListView}"> 
</ListView>
<Style TargetType="{x:Type ListView}" x:Key="GroupedListView">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
                <ListView ItemsSource="{TemplateBinding ItemsSource}">
                    <ListView.ItemContainerStyle>
                        <Style TargetType="{x:Type ListViewItem}">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                            <Setter Property="ToolTip" Value="{Binding Description}"/>
                        </Style>
                    </ListView.ItemContainerStyle>
                    <ListView.View>
                        <GridView>
                            <GridViewColumn>
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Image Source="{Binding Icon}" Width="30"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Source}"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="Event ID" DisplayMemberBinding="{Binding EventID}" />
                            <GridViewColumn Header="Severity" DisplayMemberBinding="{Binding SeverityName}" />
                            <GridViewColumn Header="Time" DisplayMemberBinding="{Binding Created}"/>
                        </GridView>
                    </ListView.View>
                    <ListView.GroupStyle>
                        <GroupStyle>
                            <GroupStyle.ContainerStyle>
                                <Style TargetType="{x:Type GroupItem}">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                                <Expander Header="{Binding Name}" Width="{Binding Width, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}">
                                                    <ItemsPresenter/>
                                                </Expander>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </GroupStyle.ContainerStyle>
                        </GroupStyle>
                    </ListView.GroupStyle>
                </ListView>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
    private void GridSorting(String Description)
    {
        System.ComponentModel.ICollectionView NewView = System.Windows.Data.CollectionViewSource.GetDefaultView(EventViewerDisplayData);
        NewView.GroupDescriptions.Add(new System.Windows.Data.PropertyGroupDescription(Description));
    }