0

MVVM Applikation を入手しました。今、可変量の列と行を持つデータグリッドが必要です。データグリッドの初期設定は正常に機能しますが、データグリッドを更新すると、次の例外が発生してアプリケーションがランダムにクラッシュします

「UI で未処理の例外が発生しました: 'コレクションが変更されました; 列挙操作 > 実行できない可能性があります。'.」

drawDatagrid() を呼び出した直後にクラッシュが発生する

私のxamlのコード:

<DataGrid
                            MaxWidth="{Binding Width}"
                            ItemsSource="{Binding SizeQuantityTable}"
                            AutoGenerateColumns="True"
                            SelectionMode="Single"  SelectionUnit="CellOrRowHeader"
                            MouseDown="DataGrid1_MouseClick"
                            MouseDoubleClick="AppointmentOnMouseDoubleClick"
                            CanUserResizeColumns="False"
                            CanUserResizeRows="False"
                            CanUserSortColumns="False"
                            CanUserAddRows="False"
                            CanUserDeleteRows="False"
                            CanUserReorderColumns="False"
                            ScrollViewer.CanContentScroll="True"
                            HorizontalAlignment="Left"
                            VerticalGridLinesBrush="DarkGray"
                            GridLinesVisibility="All"
                            HorizontalGridLinesBrush="DarkGray"

                            />

Datagrid を更新するための ViewModel のコード

private void drawDataGrid()
    {
        SizeQuantityTable = new DataTable();
        DataColumn dayColumn = new DataColumn();
        try
        {
            dayColumn.ColumnName = "Tag";
            SizeQuantityTable.Columns.Add(dayColumn);
            foreach (var line in CalenderWorkPlanLines)
            {
                DataColumn column = new DataColumn();
                column.ColumnName = line.Fullname;
                SizeQuantityTable.Columns.Add(column);
            }
            for (int i = 0; i < DaysOfMonth.Count(); i++)
            {

                    DataRow row = SizeQuantityTable.NewRow();
                    row[dayColumn] = DaysOfMonth[i];
                    int j = 1;
                    foreach (var line in CalenderWorkPlanLines)
                    {
                        var tmp = line.AppointmentsString.ToList();
                        row[SizeQuantityTable.Columns[j]] = line.AppointmentsString[i];
                        j++;
                    }
                    SizeQuantityTable.Rows.Add(row);
            }

            App.Current.Dispatcher.BeginInvoke(
                        (System.Action)(() =>
                        {
                            RaisePropertyChanged("SizeQuantityTable");

                        }), null);


        }
        catch (Exception ex)
        {
            Loggers.StartUI.Error("Exception during population of SizeQuantityTable - WorkPlanAppointments" + "in CalenderWorkplanViewModel", ex);


        }
    }
4

1 に答える 1