在类之间绑定

时间:2014-06-18 10:14:14

标签: c# wpf xaml

我有一个Node类,用于存储树。 Text存储Node值,Children存储子树。我将树转换为DataTable,首先展平树并将其保存在DataTable中

public class Node
{
    public string Text { get; set; }
    public List<Node> Children { get; set; }
}

例如

     1
    / \
   2   5
  / \   \
 3   4   6

被夷为平地

1-2-3
1-2-4
1-5-6

现在我将此DataTable绑定到DataGrid。当用户更改DataGrid中的值时,它在DataTable中更改,但是在我的树中也有任何更改方式。我问的是Node和Datatable这两个类之间是否存在绑定。

2 个答案:

答案 0 :(得分:3)

  

我将树转换为DataTable,首先展平树并将其保存在DataTable中

为什么你会自愿让你的工作更复杂,没有任何好处?请勿转换(或“展平”)您的数据,请勿使用DataTable来保留数据,也不要将其显示在DataGrid中。您问如果我展平我的分层数据,是否可以以分层方式表示对该展平数据所做的更改?答案是是......但是有很多工作< / em>的

更好的选择是将分层数据保持在分层形式,然后以TreeView或其他分层方式显示。以自然形式绑定实际数据的数据将使更改能够按预期传播回数据元素。

答案 1 :(得分:0)

您的数据库结构有点冗长。 IMO您应该将对象定义为父键/值对,这样您就可以编辑单个值而无需重新读取整个树。它还可以通过调用单选查询轻松获取子项列表。如果树中的值不同,则可能会将您的值威胁为主键。如果他们可以在树上重复,那么您需要额外的第三个字段来存储唯一的ID密钥。

我不确定您使用的是哪种DataGrid访问,但是f.e.使用LinqToSql,您可以创建自己生成包含实体定义的数据模型上下文。然后你可以编辑它(或从中派生)并添加List<Node> Children作为带有自定义getter的非db字段,为你返回一些惰性的子项集合。