数据绑定WPF ListBox以响应WCF服务调用

问题描述:

如果您愿意,图片将包含一个包含ListBox的单个窗口的Visual Studio 2008 WPF应用程序。此应用程序包含一个方法,如下所述,它将ListBox绑定到数据库表的内容。数据绑定WPF ListBox以响应WCF服务调用

此应用程序也恰好实现WFC服务合同,托管上述WCF服务。

数据绑定方法如下在respose调用以在窗口上都按下按钮,并且响应于一个方法的针对由应用程序托管WCF服务远程调用。

当按钮调用时,按下绑定可正常工作,并且列表框反映数据库表的内容。我可以在底层表中插入一些记录,点击按钮并刷新列表框的内容以反映新记录。但是,通过WCF服务远程触发时,对数据库的任何更改都不会反映在列表框中。从单步执行代码开始,数据集包含正确的表格视图,但列表框保留了表格的前一个视图,并且不反映数据集合的内容。

起初我以为这听起来像一个线程的问题,所以我想利用同步对象,但无济于事。从我的调查来看,这两个调用都是在UI线程上收到的。

任何建议表示赞赏 - 这可能是一些令人眼花缭乱明显知道我的运气...

private void BindData() 
    { 
     SqlConnection connection; 

     using (connection = new SqlConnection(CONNECTION_STRING)) 
     { 
      DataSet dtSet = new DataSet(); 
      SqlCommand command = new SqlCommand("SELECT * FROM TheTableWithMyStuffIn", connection); 
      SqlDataAdapter adapter = new SqlDataAdapter(); 
      connection.Open(); 
      adapter.SelectCommand = command; 
      adapter.Fill(dtSet, "TheTableWithMyStuffIn"); 
      listBox1.DataContext = dtSet; 
     } 
    } 

更新:我重新实现远程通知机制使用远程而非WCF和数据绑定现在工作当被远程和本地调用时。使用WCF必须有一些背景含义?

我可能完全关闭光束这里因为我没有任何与.NET多年,但没有其他人提供了到目前为止的答案,所以这里去。

从MSDN文档的快速扫描如何数据绑定在.NET框架中实现,我得到更新,以控制取决于被解雇绑定的数据源改变时性事件的印象。我注意到,在你目前的代码中,ListBoxDataContext酒店有分配给它的新DataSet数据已通过Fill方法被检索后。

难道是这样的,在已经检索到数据的情况下,应该导致ListBox实现更新数据的一些事件是否发生得太快?人们会认为DataContext属性的设置足以导致它更新;但考虑到在框架背后似乎有很多管道工程,并且在不同环境中修改后成功更新了ListBox,我会开始怀疑有漏洞的抽象:也就是说,尽管有些东西按预期工作当以一种方式使用时,以另一种方式使用时会失败,因为潜在的管道(虽然不一定有缺陷)是不同的。

也许分配DataContext属性之前填写DataSet将会产生差异。或者,这可能只是一个表面上合理的猜测,但完全和明显错误,并且只会背叛我几乎完全缺乏对.NET内部知识的知识。

无论哪种方式,祝你好运:-)

+0

为响应尼克非常感谢。我曾尝试按照您的建议洗牌,然后尝试了各种回收DataSet的方法,但仍然没有运气。 – 2009-07-20 07:12:47

我不知道,如果DataSet实现了相应的接口,自动将导致一个WPF列表框更新,但假设它确实,试试这个:而不是创建全新的DataSet并将其分配给列表框,请尝试从数据库中重新填写相同的实例。如果我正在写这个,我可能会使用ObservableCollection<T>字段而不是DataSet,但这意味着您需要将数据移动到DTO或实体中。

+0

干杯夫人。我已经试过回收数据集没有效果。奇怪的是,这是完美的响应按钮按下,它只是在WCF方法的上下文中调用时,它不起作用。 数据将在某个时刻移入实体模型中 - 上面的代码仅仅是为了说明问题而进行的简化。无论如何,它可能是值得追求的,希望它能解决这个问题,但我的内心极客需要知道为什么这不起作用。 – 2009-07-20 09:07:50

您是否试过检查.Net 3/.Net 3.5/Windows SDK附带的Service Trace Viewer

可能值得检查正在反弹的消息,看看是否有任何东西出现在那里。

祝你好运。

编辑

你可能想尝试在检测无声数据绑定错误this文章...

+0

Cheers Kieron - 关于无提示数据绑定错误的文章在我的问题的上下文中看起来非常有趣。我现在有一个解决远程处理的解决方案,但我会在接下来的几天重新审视它,以便深入了解为什么WCF不能用作IPC机制。 – 2009-07-22 07:10:08

+0

np,保持我们的发布。有趣的是看看问题是什么。 – Kieron 2009-07-22 09:03:47

+0

出于感兴趣的问题,您使用的是哪种类型的频道? – Kieron 2009-07-22 11:41:12