Проблема производительности с ListControl и Observable Dictionary WPF - PullRequest
0 голосов
/ 30 августа 2018

У меня есть itemsControl, привязанный к наблюдаемому словарю, показывающий ключ и значение в двух текстовых полях, Загрузка пользовательского контроля занимает около 15 секунд. Я попытался виртуализировать стековые панели и переключить их либо в список, либо с помощью обычного словаря, и задержка все еще возникает

Есть идеи, что может быть причиной этого, и как я могу заставить его загружаться быстрее?

 public partial class WordsView : UserControl, INotifyPropertyChanged
    {
        public WordsView()
        {
            InitializeComponent();

            Dictionarylist.ItemsSource = curDic;
        }

        private ObservableDictionary<string,int> cur_dic = new ObservableDictionary<string, int>(App.PredDic);
        public ObservableDictionary<string, int> curDic
        {
            get { return cur_dic; }
            set
            {
                SetField(ref cur_dic, value, "curDic");

            }
        }
}
}

и мой xaml

<UserControl x:Class="Ez.Management.WordsView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Ez.Management"
              DataContext="{Binding RelativeSource={RelativeSource Self}}"
              xmlns:properties="clr-namespace:Ez.Properties" 
             xmlns:main ="clr-namespace:Ez"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
       <StackPanel>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <GroupBox Grid.Row="1" Header="Words">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>

                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <ItemsControl x:Name="Dictionarylist" ItemsSource="{Binding curDic}" VirtualizingStackPanel.IsVirtualizing="True"
    ScrollViewer.CanContentScroll="True">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel></VirtualizingStackPanel>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid Margin="3">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="3*"></ColumnDefinition>
                                            <ColumnDefinition Width="1*"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>
                                        <TextBlock Text="{Binding Key}" Grid.Column="0" />
                                        <TextBlock Text="{Binding Value}" Grid.Column="1"/>
                                    </Grid>
                            </DataTemplate>
                            </ItemsControl.ItemTemplate>


                    </ItemsControl>

                </Grid>
            </GroupBox>
        </Grid>
    </StackPanel>

</UserControl>

1 Ответ

0 голосов
/ 30 августа 2018

ScrollViewer.CanContentScroll занимает много времени ... Попробуйте установить его на False. Как,

ScrollViewer.CanContentScroll="False"
...