Похоже где-то в моей ДНК закралась ошибка, но уже пару дней бъюсь головой об проблему: при выполнении операции добавления и удаления элемента в Table<>, связаные с ним контролы не отображают новый элемент и не удаляют удалённый. При этом обновление содержимого работает нормально, а запросы insert/delete уходят в базу. То есть результат insert/update виден только при следующем запуске программы (SubmitChanges не помогает)
Теперь подробнее. Дано
Таблица в MSSQL2005:
CREATE TABLE [Symptoms](
[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [dbo].[Title] NOT NULL,
[Description] [dbo].[Description] NULL,
[Media] [int] NULL,
[MainPart] [int] NOT NULL
)
UDT Title и Description это nvarchar и ntext
Для этой таблицы в O/R Designer сделан Entity класс (посредством перетаксивания из Server Explorer), который я не менял
Для всего приложения создаётся экземпляр полученого O/R датаконтекста:
if(DataContext_==null) {
DataContext_=new DataDataContext();
DataContext_.ObjectTrackingEnabled=true;
DataContext_.DeferredLoadingEnabled=true;
}
В xaml выполняется привязка к ListBox:
<CollectionViewSource x:Key="SymptomsDataView" Source="{Binding Source={x:Static Application.Current}, Path=DataContext.Symptoms}" />
......
<ListBox DataContext="{Binding Source={StaticResource SymptomsDataView}} Name="SymptomsList" DisplayMemberPath="Name" ItemsSource="{Binding Path=.,Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" />
На той же форме есть кнопка добавить запись с привязаным событием вида:
Symptom s=new Symptom();
s.Name="Новый симптом";
s.AnatomicPart=((App)App.Current).DataContext.AnatomicParts.First();
((App)App.Current).DataContext.Symptoms.InsertOnSubmit(s);
((App)App.Current).DataContext.SubmitChanges();
Если всё это запустить, то в литсбоксе появятся элементы из БД, их даже можно будет поменять посредством detail — части представления, но нажатие на кнопку добавить приводит к тому что в БД запись вставляется, однако её не видно в листбоксе. Тоже самое при операции удаления.