У меня есть WPF приложение, использующее datagrid. Datagrid привязан к BindingList элементов пользовательского типа. Но когда я добавляю новый элемент в список, я получаю следующий wxception:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
XAML:
<Window x:Class="DoctorApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"
Closed="Window_Closed">
<DataGrid AutoGenerateColumns="True"
Height="184" HorizontalAlignment="Left" Margin="12,12,0,0"
Name="dataGrid1" VerticalAlignment="Top" Width="479"
ItemsSource="{Binding}" />
код окна:
public BindingList<Patient> tableData;
public List<CompositeType> ntfList;
Listener listener;
public MainWindow()
{
InitializeComponent();
tableData = new BindingList<Patient>()
{
};
//Bind the DataGrid to the customer data
dataGrid1.DataContext= tableData;
dataGrid1.AutoGeneratedColumns += (a, b) =>
{
try
{
dataGrid1.Columns.RemoveAt(0); //the place where exception appears
}
catch (Exception ex)
{
}
dataGrid1.Columns.RemoveAt(1);
dataGrid1.Columns.RemoveAt(2);
};
ntfList = new List<CompositeType>();
dataGrid1.MouseDoubleClick += (a, b) => OpenPatientWindow();
button1.Click += (a, b) => OpenPatientWindow();
}
Место, куда добавляются новые данные:
public void OnMessageAdded(CompositeType message)
{
if (((message as CompositeType).formTitle.Equals("Informing Doctor")) || ((message as CompositeType).formTitle.Equals("Informing about end therapy")))
{
Patient p = (message as CompositeType).patient;
// (mainWindow as MainWindow).dataGrid1.
(mainWindow as MainWindow).tableData.Add(p);
(mainWindow as MainWindow).ntfList.Add(message as CompositeType);
(mainWindow as MainWindow).dataGrid1.Items.Refresh();
}
}
Я получаю новые данные для списка из службы WCF через функцию обратного вызова OnMessageAdded, но данные, которые я получаю из службы, полностью в порядке.
И пользовательский класс, который я использую:
[Serializable]
public class Patient
{
[DataMember]
public String PatientId;
[DataMember]
public String Surname;
[DataMember]
public String Name;
[DataMember]
public String Patronymic;
[DataMember]
public String Adress;
[DataMember]
public String Phone;
[DataMember]
public String Birthday;
[DataMember]
public String Diagnosis;
[DataMember]
public String State;
[DataMember]
public String TherapyStart;
[DataMember]
public String TherapyEnd;
}
Есть идеи, почему это не работает?
EDIT: Я в аналогичном проекте объект Patient просматриваю следующим образом:
Когда в моем проекте это выглядит следующим образом:
Я думаю, что это проблема, но понятия не имею, что это значит.