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);
}
}