gpt4 book ai didi

silverlight - 使用 MVVM 定期更新 silverlight View

转载 作者:行者123 更新时间:2023-12-03 10:50:20 25 4
gpt4 key购买 nike

我正在尝试在 Silverlight 中使用 MVVM,但我对它很陌生,所以我对某些事情不太确定。我有一个 silverlight 页面,它显示了一些服务器端操作的进度。当前进度来自 Web 服务,应该每隔几秒刷新一次(为了论证,假设为 10 秒)。

实现这一点的最佳方法是什么?我能想到的选择是:

  • 在我的 ViewModel 的 Initalize 方法中初始化 DispatcherTimer 并从 DispatcherTimer 事件刷新 View (将计时器详细信息放入 ViewModel)
  • 创建一个围绕 DispatcherTimer 的包装器(例如 PeriodicCommandExecutor),它是一个类似于 WindowsForms 中的 Timer 控件的控件或资源,具有我绑定(bind)到 ViewModel 中的 Refresh 命令的命令属性(将计时器详细信息放在 View 中)

  • 我认为第二个选项是首选,因为它使 ViewModel 更容易测试,而 DispatcherTimer 是我不希望在我的 ViewModel 中适本地使用的 UI 实现细节。你同意?

    如果是,您将如何创建这样的包装器。我开始做一个带有附加属性的 DependencyObject,但我不确定如何将 Interval 等属性值转发到内部 DispatcherTimer。当依赖属性发生变化并且 DispatcherTimer 不是 DependencyObject 时,Silverlight 似乎没有提供任何事件,因此我无法直接将数据绑定(bind)到它的属性。

    谢谢!

    最佳答案

    为什么要使用 DispatcherTimer?为什么不用普通的System.Threading.Timer ,它将在后台线程上触发其回调?

    如果您将 UI 进度更新放在不显眼的地方(即不在 UI 的中心,可能在底角或状态栏),那么当用户继续他们正在做的事情时,让后台计时器开始运行。进度值可以填充到 View 模型中,并使用绑定(bind)显示在 UI 上。这样您就不必占用 UI 线程来进行 Web 服务调用。

    关于silverlight - 使用 MVVM 定期更新 silverlight View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910032/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com