2

我将在现有的 MVVM WPF 应用程序中介绍 View State 功能。目标是能够保存和加载(恢复)控件的特定状态。

问题更多是关于系统灵活性/可维护性角度的设计和最佳解决方案。

目前的基础设施:

public abstract class ViewModelBase
{
   protected ViewModelBase(...)
   {
   }
}

// and few more very the same ViewModel classes for different control types
public sealed class GridViewModel : ViewModelBase
{
   protected GridViewModel(...) 
      : base(...)
   {
   }
}

我是这样介绍IViewState interface的,因此每个特定的 ViewModel 都可以提供自己的实现,例如GridViewState class并以下列方式将其放入 ViewModel 基础结构中:(想法是将 ViewState 的类型作为通用参数传递)

public abstract class ViewModelBase<TViewState>
  where TViewState : class, IViewState
{
   protected ViewModelBase(...)
   {
   }

  public TViewState ViewState { ... }
}
  1. 将 View State 功能附加到 ViewModel 是个好主意吗?
  2. 通过像这样的通用类型参数引入特定 ViewModel 类型和 ViewState 之间的绑定关系是一个很好的解决方案class GridViewModel<GridViewState>吗?
  3. 在哪里以及为什么更好地定义这样的方法,比如LoadState() / SaveState(), IViewState它自己或ViewModelBase
  4. 还有其他设计解决方案吗?
4

1 回答 1

1

您是否有理由不保留域对象,而只是在加载时从这些对象中重建 ViewModel?你的观点认为你的领域类不会持有什么样的状态?如果它与位置和位置等视觉元素有关,我会将它们推送到设置类中并坚持下去。

我假设有一些底层逻辑和类代表您的域,如果没有,那么您的 ViewModel 确实您的域并且您的想法是可靠的。

我可能会看一些类似纪念品模式的东西来补充你的虚拟机,因为它们可能会有相当多的事件和其他关系(例如,收集项的属性更改事件),这些事件不能被序列化并且必须重新创建。

那里有很多持久性模式,但从你的命名和解释来看,纪念品看起来很合适。

于 2011-09-13T12:12:38.477 回答