代码之家  ›  专栏  ›  技术社区  ›  Mark

MVVM如何为用户选择列的数据网格设计视图模型

  •  4
  • Mark  · 技术社区  · 15 年前

    所以我希望它清楚我想做什么。

    线等回答

    3 回复  |  直到 15 年前
        1
  •  2
  •   ChrisF    15 年前

    两个解决方案浮现在脑海中。

    1. 让ViewModel保存所有列,并让用户在视图中选择列。这并不理想。

    2. 使用视图数据上的反射来确定视图模型的列。

        2
  •  2
  •   slugster Joey Cai    15 年前

    • 使用XML文档描述所有可用列、它们的格式(即数字列的格式为“#0.#0”)和它们绑定到的数据字段,还描述哪些列是默认列

    • 此列描述XML通过对服务器的WCF调用检索(这是一个Silverlight项目)

    • ViewModel由一个包含列的所有数据的数据对象列表填充

    • 用户可以在网格上单击鼠标右键,然后通过上下文菜单打开一个对话框,其中包含完整的列列表,在当前可见列旁边有一个勾号(复选标记)。此对话框是从视图管理/填充的,因为ViewModel不应该知道任何关于实际UI的信息。您可能需要为此使用对话服务。对话框的VM中填充了一个匿名对象列表,其中包含列标题和列的可见性状态。

    • 当用户关闭对话框时,视图将显示/隐藏适当的列(我更进一步-当用户检查对话框中的列时,它立即在网格中变为可见,以便用户知道他们选择了正确的列,当显示数十列时,相当多的列可能非常相似)。

    使用XML文档描述列的优点是:

    • 它与UI无关;不管我使用什么网格组件,我所要做的只是更改工厂

    • XML文档可以单独更新为代码;如果客户机希望更改格式字符串,则不必重新编译代码。类似地,如果将来需要显示更多的数据,我只需要更改我的XML文档、包含数据对象定义的程序集和DAL程序集—V/VM根本不需要更改。

        3
  •  0
  •   Robert Rossney    15 年前

    DataTable 并将 DataGrid 与许多it部门互操作。如果您真的需要 DataRow (例如,像命令一样),您可以将 数据表 数据行 再加上它们。这可以帮你省下 许多 工作。

    数据表 或者创建自己的类,一个相当简单的方法是 AutoGenerateColumns true 并处理 DataGrid.AutoGeneratingColumn e.Cancel 当正在生成的列在该列表中时为true。文档显示了一个这样的示例。

    推荐文章