【问题标题】:Performance Issue with ListControl and Observable Dictionary WPFListControl 和 Observable Dictionary WPF 的性能问题
【发布时间】:2018-08-30 09:22:33
【问题描述】:

我有一个绑定到可观察字典的 itemsControl,在两个文本框中同时显示 Key 和 Value, 加载用户控件大约需要 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>

【问题讨论】:

    标签: wpf xaml data-binding itemscontrol


    【解决方案1】:

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

    ScrollViewer.CanContentScroll="False"
    

    【讨论】:

    • 这似乎没有帮助
    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多