我有一个表,其中一列是contract-type,它用一个整数表示,这是另一个具有合同名称和信息的表中的PK。
我知道如何获取所有数据。但我不知道如何在同一个数据网格中呈现它(至少不是最佳实践)。我是否必须创建自己的类,其中包含我想要的所有属性然后呈现它们?这是更好的方法吗?它不必是根据MVVM模式。
答案 0 :(得分:0)
您有两个选择:
将查询结果加载到您自己的类中,手动表示视图,在循环中逐列分配值
在数据库中创建与网格视图匹配的视图,然后加载数据将更加容易。
答案 1 :(得分:0)
在WPF中,总是最好以正确的结构提供数据。自定义类不匹配数据库表,因为它们通常是规范化的,我们在WPF中不需要它。在您的情况下,您应该声明一个Contract
类,其中包含Contract
表中的所有列名作为属性。当然,外键Id
属性也在该表中?
将Contract
类与外键所在的表“加入”的方法是将类型为Contract
的属性添加到表示其他表的类中:
public Contract Contract [ get; set; }
然后在XAML中,您可以像这样引用它:
<TextBlock Text="{Binding YourOtherObject.Contract.Name}" ... />
答案 2 :(得分:0)
当您使用EF 4.0时,您不应该使用DataGridColumn
字段绑定contract-type
,而应将其与Contract.ContractName
绑定
让我们用例子来理解:假设你有两个表
Contract { ContractID, ContractName, ContractInfo }
Client {ClientID, ClientName, ContractType} where ContractType is foreign key from Contract.ContractID
现在在EF中,您将拥有Client
课程,其中您将拥有类型为Contract
的属性Contract
,如下所示
public Contract Contract {get; set;}
此属性将指向您Contract
字段引用的ContractType
行。
因此,在DataGridColumn中,您可以提供如下所示的绑定:
{Binding Contract.ContractName}
现在,按照上面的示例,您可以将Client
类替换为您使用DataGrid
绑定的类,将Contract
类替换为您的合同表名称。
如果你对此感到困惑,请告诉我。