Fix performance issue

This commit is contained in:
azakhi 2018-08-11 01:50:26 +03:00
parent 38053666a0
commit f6969a0204
6 changed files with 41 additions and 34 deletions

View File

@ -1,27 +0,0 @@
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace Filtration.Converters
{
public class BooleanToBlockMarginConverter : IValueConverter
{
public double Length { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var item = (bool)value;
if (!item)
return new Thickness(2, 0, 2, 0);
return new Thickness(2, 2, 2, 2);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((Thickness)value) == new Thickness(0, 0, 0, 0);
}
}
}

View File

@ -167,7 +167,6 @@
<Compile Include="Converters\BooleanToBlockActionInverseConverter.cs" />
<Compile Include="Converters\BooleanToBlockActionConverter.cs" />
<Compile Include="Converters\BlockItemToRemoveEnabledVisibilityConverter.cs" />
<Compile Include="Converters\BooleanToBlockMarginConverter.cs" />
<Compile Include="Converters\HashSignRemovalConverter.cs" />
<Compile Include="Converters\ItemRarityConverter.cs" />
<Compile Include="Converters\TreeViewMarginConverter.cs" />

View File

@ -98,6 +98,7 @@ namespace Filtration.ViewModels
private IItemFilterBlockViewModelBase _selectedBlockViewModel;
private IItemFilterCommentBlockViewModel _sectionBrowserSelectedBlockViewModel;
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels;
private ObservableCollection<IItemFilterBlockViewModelBase> _viewItemFilterBlockViewModels;
private ICollectionView _itemFilterBlockViewModelsCollectionView;
private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate;
private ICommandManager _scriptCommandManager;
@ -153,6 +154,8 @@ namespace Filtration.ViewModels
icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/script_icon.png");
icon.EndInit();
IconSource = icon;
_viewItemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
}
public void Initialise(IItemFilterScript itemFilterScript, bool newScript)
@ -174,6 +177,8 @@ namespace Filtration.ViewModels
Title = Filename;
ContentId = "ScriptContentId";
UpdateBlockModelsForView();
}
private void ItemFilterBlocksOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
@ -196,6 +201,8 @@ namespace Filtration.ViewModels
break;
}
}
UpdateBlockModelsForView();
}
private void AddItemFilterBlockViewModels(IEnumerable<IItemFilterBlockBase> itemFilterBlocks, int addAtIndex)
@ -278,6 +285,19 @@ namespace Filtration.ViewModels
}
}
public ObservableCollection<IItemFilterBlockViewModelBase> ViewItemFilterBlockViewModels
{
get
{
return _viewItemFilterBlockViewModels;
}
set
{
_viewItemFilterBlockViewModels = value;
RaisePropertyChanged();
}
}
public ObservableCollection<IItemFilterBlockViewModelBase> ItemFilterBlockViewModels
{
get
@ -1191,6 +1211,22 @@ namespace Filtration.ViewModels
else
break;
}
UpdateBlockModelsForView();
}
private void UpdateBlockModelsForView()
{
ObservableCollection<IItemFilterBlockViewModelBase> blocksForView = new ObservableCollection<IItemFilterBlockViewModelBase>();
foreach (var block in ItemFilterBlockViewModels)
{
if (block.IsVisible)
{
blocksForView.Add(block);
}
}
ViewItemFilterBlockViewModels = blocksForView;
}
}
}

View File

@ -11,14 +11,13 @@
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:ItemFilterBlockViewModel}"
d:DesignHeight="200" d:DesignWidth="800" Visibility="{Binding IsVisible, Converter={StaticResource BooleanVisibilityConverter}}">
d:DesignHeight="200" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<views:BindingProxy x:Key="Proxy" Data="{Binding}" />
<converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" />
<converters:BooleanToBlockMarginConverter x:Key="BooleanToBlockMarginConverter"/>
<Style TargetType="{x:Type ContentPresenter}" x:Key="BlockItemFadeInStyle">
<Setter Property="LayoutTransform">
<Setter.Value>
@ -41,7 +40,7 @@
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="TopLevelGrid" Margin="{Binding IsVisible, Converter={StaticResource BooleanToBlockMarginConverter}}">
<Grid x:Name="TopLevelGrid">
<Grid x:Name="DisabledBlockOverlay" IsHitTestVisible="False" Panel.ZIndex="1000" Visibility="{Binding BlockEnabled, Converter={StaticResource InverseBooleanVisibilityConverter}}">
<Grid.Background>
<SolidColorBrush Color="Gray" Opacity=".5" />

View File

@ -46,7 +46,7 @@
</ResourceDictionary>
</UserControl.Resources>
<Grid Margin="2">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<ContextMenu.Items>

View File

@ -54,7 +54,7 @@
</Border>
<Border Grid.Row="1" BorderThickness="1" BorderBrush="DarkGray" Margin="5,5,5,5">
<DockPanel LastChildFill="True">
<userControls:AutoScrollingListBox ItemsSource="{Binding ItemFilterBlockViewModels}"
<userControls:AutoScrollingListBox ItemsSource="{Binding ViewItemFilterBlockViewModels}"
Padding="5"
HorizontalContentAlignment="Stretch"
BorderThickness="0"
@ -72,7 +72,7 @@
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" SnapsToDevicePixels="true">
<Border Name="Border" Padding="2" SnapsToDevicePixels="true">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>