我正在将传统的WPF代码隐藏应用程序转移到MVVM模式。
到目前为止,我已将所有按钮处理程序移动到ModelView中。
现在轮到执行这些功能的一些逻辑了。 很多逻辑被放置在不同的类中,因为它们不涉及UI交互,但逻辑的主要部分涉及运行一些任务,然后在这些阶段更新UI,包括从后台工作者更新提供的进度条。
我考虑将此逻辑放在模型中,但似乎很难从模型更新UI(视图),因此将放入ViewModel。
这是个坏主意吗?如果是这样,为什么?
如果这个逻辑真的应放在模型中,我应该如何更新UI - 这些是该逻辑中的一些现有函数:
//if task is run update UI:
txtCurrentStatus.Text = "Preparing job...";
progressBar.IsIndeterminate = true;
progressBar.Value = 0;
txtPercentage.Text = "0%";
//When progress updates from reading a log, update progress bar
txtPercentage.Text = (percentOutput) + "%";
progressBar.Value = Convert.ToDouble(percentOutput);
答案 0 :(得分:1)
我会这样设计:
LogReader
课程。这实际上是Model UpdateProgress
活动LogReader
并侦听该事件CurrentProgress
属性Value="{Binding CurrentProgress}"
现在你对LogReader
有很好的关注,视图数据在视图模型中,绑定正在更新视图!
你当然可以保留所有"阅读"视图模型中的逻辑,但可能并不属于那里。