DataGrid с большим количеством элементов данных не будет отображаться правильно - PullRequest
0 голосов
/ 30 марта 2020

Я встретил очень странную вещь. У меня есть DataGrid в моей программе WPF. Общие настройки для 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 составляет всего одну пятую ширины таблицы. Все столбцы даже узкие, чем его содержимое. Как показано на рисунке ниже: DataGrid отображает некорректно

Я протестировал множество возможностей. И я обнаружил, что независимо от того, сколько элементов показывает DataGrid. Он начинается с очень тонкой таблицы, а затем (возможно, подождите, пока все данные загружены) становится шире, чем ее контейнер. И когда элемент данных намного больше, загрузка занимает некоторое время, и я думаю, что блокирует DataGrid для адаптации к его контейнеру.

Я пытался вручную масштабировать окно до очень маленького (просто (область данных (DataGrid)), а затем развернуть окно, и DataGrid отобразит «Правильно» следующим образом: Правильно показывает все данные

Итак, это из-за загрузки данных? Если это так, как это решить? Я попытался поместить данные загрузки в события OnLoad, чтобы сначала можно было инициализировать все компоненты, но с этим не повезло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...