【问题标题】:How to refresh an ItemsSource with Silverlight 3?如何使用 Silverlight 3 刷新 ItemsSource?
【发布时间】:2009-07-18 14:54:12
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    这里是一些 MVVM 的链接 -

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-22
        • 2011-01-15
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 2011-12-16
        相关资源
        最近更新 更多