C# WCF RIA服务存在更新问题

C# WCF RIA服务存在更新问题,c#,silverlight,linq-to-sql,silverlight-4.0,wcf-ria-services,C#,Silverlight,Linq To Sql,Silverlight 4.0,Wcf Ria Services,在通过WCF RIA服务进行更新后,我遇到了刷新页面上数据的问题 我在页面上有一个组合框和一个按钮。用户从组合框中选择一个项目,然后单击按钮。这将对数据库中的项进行软删除(设置“Active”=false)。但是,我希望在更新完成后将其从组合框中删除。这就是我的问题所在 InventorySystemDomainContext context = new InventorySystemDomainContext(); private void btnDelete_Click(object se

在通过WCF RIA服务进行更新后,我遇到了刷新页面上数据的问题

我在页面上有一个组合框和一个按钮。用户从组合框中选择一个项目,然后单击按钮。这将对数据库中的项进行软删除(设置“Active”=false)。但是,我希望在更新完成后将其从组合框中删除。这就是我的问题所在

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());
}
单击Delete按钮时,所有代码都将运行。但是,已删除的项仍在组合框中(即使数据库中的记录已更新)。如果我刷新页面,该项将从组合框中消失

有什么想法吗


PS:我用内存写了这段代码,因为我没有带代码。所以我可能忘了一行,但我想我已经掌握了所有相关的行

您是否尝试将ComboBox.ItemsSource设置为从Load方法返回的Entities集合?当LoadOperation时,EntitySets(context.com)正在聚合(它们包含来自多个加载的数据)。实体不是(它只包含来自它所代表的加载的数据)。

可接受的解决方案的问题是,该集合现在断开连接,这破坏了添加和删除绑定项的内置功能

也许更好的解决方案是在软删除之后分离有问题的实体

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

context.GetCigarettesQuery()是否返回从结果集中排除非活动项的查询?(有点像香烟。其中(c=>!c.Active))是的。在窗口加载事件中执行
LoadComboBox
方法。当我在删除后刷新页面时,已删除的项目现在从组合框中消失。我希望这样做,而不必刷新整个页面。我没有尝试过。我不知道有什么不同。我会试试。这个解决方案的缺点是网格“闪烁”/完全重新加载。在集合上调用Remove会导致在调用SubmitChanges时删除实体。不知道是否可以分离有问题的实体,然后将其删除。。。。只是大声思考。