如何使用Silverlight 3刷新ItemsSource?

时间:2009-07-18 14:54:12

标签: c# wpf silverlight data-binding silverlight-3.0

我有一个Silverlight 3应用程序,它调用传统的.NET Web服务(asmx)来获取记录列表,然后在ListBox控件中显示它(lstRecords.ItemsSource = myRecords)。任何记录都可以随时添加或更新或删除,我希望我的UI(ListBox控件中显示的记录)能够反映最新的变化。

现在,我有一个System.Threading.Timer,每隔5秒调用一次WebService并更新lstRecords.ItemsSource。 有点有效,但它并不能完全符合我的要求。例如,如果选择了一行并且ItemsSource刷新,则会丢失选择。

我想知道Silverlight 3中是否有一个机制来处理这样的事情。你对我如何做到这一点有更好的建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我的建议是遵循Model-View-ViewModel模式。您应该将Web服务与模型分开,将XAML与View分开,ViewModel应该是它们之间的层。让View(XAML)绑定到ViewModel中的ObservableCollection,让ViewModel直接调用WebService,然后将结果与ObservableCollection合并。如果每次丢失ListBox的绑定状态时重新绑定集合。

以下是MVVM的一些链接 -

答案 1 :(得分:0)

如果您在visual studio中使用“添加服务引用”对话框,则您的集合可能是ObservableCollection。您可能希望手动将后续线程中的新项目合并到此集合中。即调用您的Web服务,然后添加/删除/更新原始列表中的项目以同步列表。不要重新绑定整个列表。