C# 如何使用Silverlight 3刷新ItemsSource?

C# 如何使用Silverlight 3刷新ItemsSource?,c#,wpf,silverlight,data-binding,silverlight-3.0,C#,Wpf,Silverlight,Data Binding,Silverlight 3.0,我有一个Silverlight 3应用程序,它调用传统的.NET Web服务(asmx)来获取记录列表,然后将其显示在ListBox控件(lstRecords.ItemsSource=myRecords)中。任何记录都可以随时添加、更新或删除,我希望我的UI(列表框控件中显示的记录)反映最新的更改 现在,我有一个System.Threading.Timer,它每5秒调用一次Web服务并更新lstRecords.ItemsSource。它有点工作,但并不完全符合我的要求。例如,如果选择了一行并刷新

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

现在,我有一个System.Threading.Timer,它每5秒调用一次Web服务并更新lstRecords.ItemsSource。它有点工作,但并不完全符合我的要求。例如,如果选择了一行并刷新了ItemsSource,我将丢失选择

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


谢谢

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

我的建议是遵循模型-视图-模型模式。您应该将web服务作为模型和XAML作为视图分开,ViewModel应该是它们之间的层。让视图(XAML)绑定到ViewModel中的ObservableCollection,让ViewModel直接调用WebService,然后将结果与ObservableCollection合并。如果每次重新绑定集合,则会丢失列表框的绑定状态

以下是MVVM的一些链接-