为MDI工具窗口重用或创建新的View / ViewModel

时间:2012-08-14 21:35:47

标签: wpf mvvm mdi

在具有单例工具窗口(想想Visual Studio)的MVVM MDI应用程序中,工具窗口内容根据当前所选文档而变化。现在有5个工具窗口,还有更多工具。

我可以为每个文档的每个工具窗口重用或创建新的View和/或ViewModel。我的问题是,是否有一个压倒性的理由选择或排除其中一个选项?我完全错过了另一种选择吗?

对于每个工具窗口:

  1. 为每个文档创建一个新的View + ViewModel。当用户切换文档时,工具窗口会切换View + ViewModel。此选项的内存成本较高,但性能良好。

  2. 为每个文档创建一个ViewModel,但重用View。使用MVVM模式这是可行的,但UI重新布局可能很昂贵。

  3. 重复使用View和ViewModel以最大限度地减少内存使用量。重置ViewModel并加载另一组数据可能很难做到。

2 个答案:

答案 0 :(得分:0)

总是选择1,这提供了更好的表现,就像你说的那样,并为你的发展创造了一个很好的关注点。由于视图模型保持打开状态,您可以使用它们执行更多操作(例如显示打开的文档列表等)。

答案 1 :(得分:0)

我最终重用了View但不是ViewModel,即选项2.

要回答原来的问题,应排除考虑因素3。重用VM是没有意义的 - 如果以前的VM可以重复使用,它也可以被处理掉,并且以非常可忽略的mem / perf成本更容易为新数据创建新的VM。

选项1与2取决于渲染复杂性,性能目标和内存配额。在大多数情况下,在同一UI上切换数据的性能损失应该是可以接受的。如果渲染真的需要保存视图,可能会出现问题。