WCF RIA Services Проблема с обновлением - PullRequest
1 голос
/ 09 июля 2010

У меня проблема с обновлением данных на странице после обновления через службы 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: я написал этот код из памяти, так как у меня нет кода со мной.Так что я, возможно, забыл строку, но я думаю, что получил все соответствующие строки.

Ответы [ 2 ]

3 голосов
/ 10 июля 2010

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

0 голосов
/ 12 мая 2011

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

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

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