【问题标题】:Map complex UI to Object cleanly and efficiently将复杂的 UI 干净高效地映射到 Object
【发布时间】:2009-12-02 19:03:42
【问题描述】:

我目前有一个使用 mv-vm 的应用程序(在 Silverlight 中),它具有向数据库添加/编辑/删除各种条目的界面。一个很好的类比是一个用于订购汽车的页面,该页面包含许多复选框和组合框,用于您希望汽车包含的任何功能。

我的应用有许多这样的 UI 元素(甚至包括带有 TreeViewItemCheckBox 的 TreeView),我想将它们映射到使用字典存储任何包含选项的数据对象。

我的困难是找到将这些 UI 元素映射到我的视图模型的最佳方法,以便可以将它们编译并发送到数据库。我最初的方向是将每个元素映射到我的视图模型中的一个属性,但它看起来很笨重。

<TreeView>
   <TreeViewItem>
      <TreeViewItem.Header>
          <TreeViewItemCheckBox Content="All Features" IsChecked="{Binding AllFeaturesChecked}"/>
      </TreeViewItem.Header>
      <TreeViewItemCheckBox Content="Feature1" IsChecked="{Binding Feature1Checked}"/>
      <TreeViewItemCheckBox Content="Feature2" IsChecked="{Binding Feature2Checked}"/>
      <TreeViewItemCheckBox Content="Feature3" IsChecked="{Binding Feature3Checked}"/>
      <TreeViewItemCheckBox Content="Feature4" IsChecked="{Binding Feature4Checked}"/>
  </TreeViewItem>
</TreeView>

...乘以 10 你就明白了。

有人能想出更好的方法吗?

谢谢!

【问题讨论】:

    标签: silverlight xaml mvvm user-interface


    【解决方案1】:

    为什么不让您的 ViewModel 负责此逻辑?使它非常通用是令人信服的,但您总是会遇到一些不太适合字典的复杂 UI。很多边缘案例。我建议这样做:

    public class BaseViewModel : ViewModel //Your basic viewmodel with INPC, etc
    {
        public virtual void LoadModel(DictionaryTypeThing model) {}
        public virtual DictionaryTypeThing GetModel() {}
    }
    

    在这里,您将阅读和创建这些字典的责任交给 ViewModel,在这种情况下,ViewModel 是您的应用程序中最了解如何将所有内容组合在一起的部分。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2015-12-11
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      相关资源
      最近更新 更多