[WPF} обновление UI при insert/delete в БД
От: andr3ya  
Дата: 12.11.08 13:09
Оценка:
Похоже где-то в моей ДНК закралась ошибка, но уже пару дней бъюсь головой об проблему: при выполнении операции добавления и удаления элемента в 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 — части представления, но нажатие на кнопку добавить приводит к тому что в БД запись вставляется, однако её не видно в листбоксе. Тоже самое при операции удаления.
wpf binding linq mssql
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.