我是一名新手.net程序员,过去一个月学习WPF。我从一开始就感到困惑的一件事是如何构建实时数据驱动的应用程序。我从一个基本的应用程序开始,我需要将数据绑定到一个大约有10列的数据网格。我在所有教程中看到的数据绑定的常见方式是它们有一个样本数据,用于构建业务对象(最多两个/三个字段)。但是当涉及到处理更大的数据对象时,他们是否为所有10/15字段编写了getter / setter?为此,我更喜欢直接将DataGrid绑定到DataTables,这涉及更少的代码。但似乎这种方法可能会遗漏几个优点,例如获得有关源/集合更改的通知等。我不知道实时应用程序构建。如果我得到这方面的指导,那就太好了。
答案 0 :(得分:3)
我在DataGrid中没有超过15-20列的经验,但为此我确实为属性创建了getter和setter。
创建使用INotifyChanged模拟属性的代码片段当然也有帮助。 http://drwpf.com/blog/2007/11/17/my-wpf-code-snippets/
它还取决于您从哪里获取对象。在我做的一个项目中,实体来自Entity Framework,它确实在属性上实现了INotifyPropertyChanged,因此在这种情况下我不需要编写包装属性。我可以将实体属性直接绑定到datagrid的列。
答案 1 :(得分:2)
开发数据驱动的应用程序没有灵丹妙药。我使用SOA风格的应用程序结构来编写企业资源规划应用程序 - 我可以向您保证,我从不直接使用DataTables :-)。如果您只有一个用户和有限数量的数据,DataTables就可以了IMO。只要添加第二个用户......就应该远离DataTables(和DataSet等)。
但要回答你的问题 - 当我拥有包含许多属性的对象的大型数据集时,我倾向于显示最多10列 - 如果有更多属性,我将它们放在详细信息部分/单独的详细信息视图中。然后,我将各列绑定到对象的10个(或左右)最重要的属性。
我只使用DataGrid(读写表格数据)来处理非常小的集合,这些集合具有相当简单的对象 - 通常是父对象的集合属性。在其他地方我使用ListBox或ListView只显示数据(只读) - 然后是用于创建/更新单个项目的详细信息部分。这使得处理数据库(或任何数据存储区)的CRUD(创建/读取/更新/删除)动作变得更加容易。
在WPF中开始有很多可能性可能有点压倒性 - 但我建议你在某些时候看看M-V-VM,以真正利用WPF的强大功能(和简单性)。我已经写了一篇十篇博文系列,其中有一种方法可以实现 - 它开始here。如果你刚刚开始,它可能比你的水平高一点,但是在那些你无法入睡的日子里保存它...... :-)
希望这至少能给你一些指示: - )
答案 2 :(得分:1)
这些可能会有所帮助:
How do I bind a WPF DataGrid to a variable number of columns?
http://www.codeproject.com/KB/WPF/MovingTowardWpfBinding.aspx
答案 3 :(得分:1)
通常,在大型企业应用程序中,您确实拥有8-10个属性(字段)的Business Objects(BO)。当DB中的表变大时,进行规范化以保持较少的列数并创建不同的表(通过外键连接);在Bo的情况下也是如此,它们被设计(使用各种OOP的概念),因此每个BO将具有所有相关属性并且具有可维护的大小。大BO将是这些较小BO的组合。这增强了可用性,同时您不必处理具有大量属性的BO。