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