包含大量数据项的DataGrid将无法正确显示

时间:2020-03-30 12:32:28

标签: wpf datagrid

我遇到了一件很奇怪的事情。我的WPF程序中有一个DataGrid。 DataGrid的总体设置如下:

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <!--DataGrid element-->
    <DataGrid
        Grid.Row="0"
        x:Name="LoadDataGrid"
        ItemsSource="{Binding DataGridSource, UpdateSourceTrigger=PropertyChanged}" 
        AutoGenerateColumns="False"
        CanUserAddRows="False"
        CanUserSortColumns="False"
        CanUserDeleteRows="False"
        CanUserReorderColumns="False"
        GridLinesVisibility="All"
        HorizontalScrollBarVisibility="Auto"
        VerticalScrollBarVisibility="Visible"
        HorizontalAlignment="Center"
        RowHeaderWidth="0"
        BorderBrush="Black"
        BorderThickness="1"
        Background="{StaticResource CustomPureWhiteBrush}"
        SelectedIndex="{Binding CurrentRowIndex, Mode=TwoWay}">
        <DataGrid.Columns>
        ...
        </DataGrid.Columns>
        </DataGrid>

ViewModels中的相关代码为:

    /// <summary>
    /// Load DataGridSource automatically if data file is saved in the same directory with the dwg drawing.
    /// If it doesn't exist, all a new empty item to DataGridSource
    /// </summary>
    protected override void DataGridSourceLoaded()
    {
        // Check if the data file exists
        bool IsDataSourceExists = HX_FileOperations.IsFileExistsInCurrentDirectory("低压配电回路设计.HX");

        // If it doesn't exist, add an initial member to DataGridSource
        if (!IsDataSourceExists)
        {
            // Add a new item to the GridDataSource
            DataGridSource.Add(new LoadItemViewModel()
            {
                Id = DataGridSource.Count + 1,
            });
        }
        // If it exists, then read data to DataGridSource
        else
        {
            DataGridSource.Clear();
            List<Loads> loadsList = FileOperation.ReadBinaryDataFromCurrentDirectory("低压配电回路设计.HX") as List<Loads>;
            for (int i = 0; i < loadsList.Count; i++)
            {
                DataGridSource.Add(new LoadItemViewModel()
                {
                    Id = i + 1,
                    TransformerNumber = loadsList[i].TransformerNumber,
                    ELVCabinetNumber = loadsList[i].ELVCabinetNumber,
                    CircuitNumber = loadsList[i].CircuitNumber,
                    UnitType = loadsList[i].UnitType,
                    SeperationHeight = loadsList[i].SeperationHeight,
                    EquiptmentNumber = loadsList[i].EquiptmentNumber,
                    EquiptmentFunction = loadsList[i].EquiptmentFunction,
                    LoadsType = loadsList[i].LoadsType,
                    LoadLevel = loadsList[i].LoadsLevel,
                    ApplicationRange = loadsList[i].ApplicationRange,
                    DieselConnection = loadsList[i].DieselConnection,
                    EquiptPowerP = loadsList[i].EquiptPowerP,
                    EquiptPowerX = loadsList[i].EquiptPowerX,
                    SimultaneousRatioP = loadsList[i].SimultaneousRatioP,
                    SimultaneousRatioX = loadsList[i].SimultaneousRatioX,
                    PowerRatioP = loadsList[i].PowerRatioP,
                    PowerRatioX = loadsList[i].PowerRatioX,
                    TanP = loadsList[i].TanP,
                    TanX = loadsList[i].TanX,
                    PcP = loadsList[i].PcP,
                    PcX = loadsList[i].PcX,
                    QcP = loadsList[i].QcP,
                    QcX = loadsList[i].QcX,
                    ScP = loadsList[i].ScP,
                    ScX = loadsList[i].ScX,
                    IcP = loadsList[i].IcP,
                    IcX = loadsList[i].IcX,
                });
            }
        }
    }

当显示少于10个数据项时,DataGrid的宽度与Grid一样大。但是,当显示更多数据项时,DataGrid的宽度仅为Grid宽度的五分之一。所有列甚至比其内容还窄。 如下图所示: The DataGrid displays incorrectly

我已经测试了很多可能性。而且我发现,无论DataGrid显示多少项目。它从一个非常薄的表开始,然后(也许等待所有数据被加载)变得和它的容器一样宽。而且,当数据项更多时,加载需要一段时间,而且我认为这会阻止DataGrid适应其容器。

我试图手动将窗口缩放到很小的窗口(仅覆盖DataGrid的很多区域),然后最大化窗口,DataGrid却显示为Correct,如下所示: Correctly showing all data

那么,是因为加载数据了吗?如果是,该如何解决?我已经尝试将加载数据放入OnLoad事件中,以便可以首先初始化所有组件,但是这样做并不幸运。

0 个答案:

没有答案
相关问题