ListControl和Observable Dictionary WPF的性能问题

问题描述 投票:0回答:1

我有一个itemsControl绑定到一个可观察的字典,显示两个文本框中的键和值,用户控件加载大约需要15秒。我尝试虚拟化stackpanels并将其切换到列表框或使用常规字典,但仍然会出现延迟

可能导致这种情况的任何想法,以及如何让它加载更快?

 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>
wpf xaml data-binding itemscontrol
1个回答
0
投票

ScrollViewer.CanContentScroll需要时间...尝试将其设置为False。喜欢,

ScrollViewer.CanContentScroll="False"
© www.soinside.com 2019 - 2024. All rights reserved.