MVVM:在哪里放置某些逻辑

时间:2015-01-22 22:43:51

标签: c# wpf mvvm

我正在将传统的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);

1 个答案:

答案 0 :(得分:1)

我会这样设计:

  1. 创建一个LogReader课程。这实际上是Model
  2. 的一部分
  3. 让该课程举起UpdateProgress活动
  4. ViewModel拥有LogReader并侦听该事件
  5. 在事件回调中,它在ViewModel上设置CurrentProgress属性
  6. 视图的进度条包含Value="{Binding CurrentProgress}"
  7. 现在你对LogReader有很好的关注,视图数据在视图模型中,绑定正在更新视图!

    你当然可以保留所有"阅读"视图模型中的逻辑,但可能并不属于那里。