数据绑定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框架中实现,我得到更新,以控制取决于被解雇绑定的数据源改变时性事件的印象。我注意到,在你目前的代码中,ListBox
的DataContext
酒店有分配给它的新DataSet
数据已通过Fill
方法被检索后。
难道是这样的,在已经检索到数据的情况下,应该导致ListBox
实现更新数据的一些事件是否发生得太快?人们会认为DataContext
属性的设置足以导致它更新;但考虑到在框架背后似乎有很多管道工程,并且在不同环境中修改后成功更新了ListBox
,我会开始怀疑有漏洞的抽象:也就是说,尽管有些东西按预期工作当以一种方式使用时,以另一种方式使用时会失败,因为潜在的管道(虽然不一定有缺陷)是不同的。
也许分配DataContext
属性之前填写DataSet
将会产生差异。或者,这可能只是一个表面上合理的猜测,但完全和明显错误,并且只会背叛我几乎完全缺乏对.NET内部知识的知识。
无论哪种方式,祝你好运:-)
我不知道,如果DataSet
实现了相应的接口,自动将导致一个WPF列表框更新,但假设它确实,试试这个:而不是创建全新的DataSet
并将其分配给列表框,请尝试从数据库中重新填写相同的实例。如果我正在写这个,我可能会使用ObservableCollection<T>
字段而不是DataSet
,但这意味着您需要将数据移动到DTO或实体中。
干杯夫人。我已经试过回收数据集没有效果。奇怪的是,这是完美的响应按钮按下,它只是在WCF方法的上下文中调用时,它不起作用。 数据将在某个时刻移入实体模型中 - 上面的代码仅仅是为了说明问题而进行的简化。无论如何,它可能是值得追求的,希望它能解决这个问题,但我的内心极客需要知道为什么这不起作用。 – 2009-07-20 09:07:50
您是否试过检查.Net 3/.Net 3.5/Windows SDK附带的Service Trace Viewer?
可能值得检查正在反弹的消息,看看是否有任何东西出现在那里。
祝你好运。
编辑:
你可能想尝试在检测无声数据绑定错误this文章...
为响应尼克非常感谢。我曾尝试按照您的建议洗牌,然后尝试了各种回收DataSet的方法,但仍然没有运气。 – 2009-07-20 07:12:47