1

У меня возникает проблема с обновлением данных на странице после выполнения обновления через службы WCF RIA.Проблема служб WCF RIA с обновлением

У меня есть ComboBox и кнопка на странице. Пользователь выбирает элемент из ComboBox, а затем нажимает кнопку. Это делает мягкое удаление элемента в базе данных (установка «Active» = false). Однако я бы хотел, чтобы он был удален из ComboBox после завершения обновления. Вот где моя проблема.

InventorySystemDomainContext context = new InventorySystemDomainContext(); 

private void btnDelete_Click(object sender, RoutedEventArgs e) 
{ 
    Cigarette c = cboCigarette.SelectedItem as Cigarette; 
    c.Active = false; 

    SubmitOperation so = context.SubmitChanges(); 
    so.Completed += delegate (object s, EventArgs es) 
    { 
     LoadComboBox(); 
    } 
} 

private void LoadComboBox() 
{ 
    cboCigarettes.DataSource = null; 
    cboCigarettes.DataSource = context.Cigarettes; 
    context.Load(context.GetCigarettesQuery()); 
} 

При нажатии кнопки «Удалить» выполняется весь код. Однако удаленный элемент все еще находится в ComboBox (даже если запись была обновлена ​​в базе данных). Если я обновляю страницу, элемент исчезнет из ComboBox.

Любые идеи?

PS: Я написал этот код из памяти, так как у меня нет кода со мной. Поэтому я, возможно, забыл строку, но я думаю, что у меня есть все соответствующие строки.

+0

Does context.GetCigarettesQuery() возвращает запрос, который исключает неактивные элементы из результирующих? (что-то вроде Сигареты. Где (c =>! c.Active)) – STO

+0

Да, так оно и есть. Метод LoadComboBox' выполняется в событии Window_Loaded. Когда я обновляю страницу после удаления, удаленный элемент теперь уходит из ComboBox. Я хотел бы, чтобы это произошло без обновления всей страницы. –

ответ

3

Вы пытались установить ComboBox.ItemsSource для коллекции Entities из метода Load? EntitySets (context.Cigarettes) агрегируются (они содержат данные из нескольких нагрузок), в то время как LoadOperation.Entities нет (он содержит только данные из представленной нагрузки).

+0

Я этого не пробовал. Я не знал, что есть разница. Я попробую это. –

+1

Недостатком этого решения является то, что сетка «Мигает»/перезагружается полностью. Вызов Удаление из коллекции приводит к удалению сущности при вызове функции SubmitChanges. Интересно, можете ли вы отделить объект, о котором идет речь, а затем удалить его ... просто вслух. –

0

Проблема с принятым решением состоит в том, что коллекция теперь отключена, что противоречит встроенной элегантности добавления и удаления связанных предметов.

Возможно, лучшее решением было бы отделить объект в вопросе после мягкого удаления

InventorySystemDomainContext context = new InventorySystemDomainContext(); 

private void btnDelete_Click(object sender, RoutedEventArgs e) 
{ 
    Cigarette c = cboCigarette.SelectedItem as Cigarette; 
    c.Active = false; 

    SubmitOperation so = context.SubmitChanges(OnCigaretteSaved, null); 
} 

private void OnCigaretteSaved(SubmitOperation so) 
{ 
    context.Cigarettes.Detach(context.Cigarettes.Where(item => item.Active == false).First()); 
} 

private void LoadComboBox() 
{ 
    cboCigarettes.DataSource = null; 
    cboCigarettes.DataSource = context.Cigarettes; 
    context.Load(context.GetCigarettesQuery()); 
}