2011-03-30 14 views
2

让我们先想象一些领域对象:Infragistics xamDataGrid绑定到分层数据 - 如何通知网格在第二级更改?

Customer: 
    Name 
    Phone 
    List of Orders 

Order: 
    Date 
    Amount 

我的网格,然后建立与下面的字段集:

<XamDataGrid> 
    <XamDataGrid.FieldLayouts> 
    <FieldLayout Key="Customers"> 
     <Field Name="Orders" IsExpandable="True" /> 
     <Field Name="Name" /> 
     <Field Name="Phone" /> 
    </FieldLayout> 
    <FieldLayout ParentFieldLayoutKey="Customers"> 
     <Field Name="Date" /> 
     <Field Name="Amount" /> 
    </FieldLayout> 
    </XamDataGrid.FieldLayouts> 
</XamDataGrid> 

,当我的客户名单是预先填充数据也能正常工作。每个客户行都获得一个+,点击后,该行将展开以显示订单列表。

现在,一切美好的东西玩完了......

我们试图让订单异步,当用户展开行这给了我们一个空的集合。当异步调用完成时,集合被更新,但网格不会更新。

由于集合最初是空的,网格删除了+,并且用户不再具有拼凑/展开的能力。如果集合包含数据,当用户第一次展开该行时,如果向集合添加更多对象,则网格要更新。

这应该如何工作?

回答

3

尝试使用ObservableCollection作为树形结构中的节点集合。

+0

哇。那容易?现在唯一的问题是,更改发生在后台线程中,所以我们需要找到一种方法来使ui线程上的可观察收集信号发生变化。谢谢! – Vegar 2011-03-30 21:16:40

0

请尝试this..It工作

首先,这样

public class CustomerDetails1 
    { 
     public string Id { set; get; } 
     public string Name { set; get; } 
     public string Place { set; get; } 
     public string Mobile { set; get; } 
     public List<Level2Customer> Level2CustomerInst { get; set; } 
    } 

    public class Level2Customer 
    { 
     public string Address { set; get; } 
     public string Street { set; get; } 
    } 

在XAML页面

<igWPF:XamDataGrid Width="767" Name ="TestDatagrid" DataSource="{Binding CustomerList1}" Height="403"> 
            <igWPF:XamDataGrid.FieldLayoutSettings> 
             <igWPF:FieldLayoutSettings AutoGenerateFields="False"/> 
            </igWPF:XamDataGrid.FieldLayoutSettings> 
            <igWPF:XamDataGrid.ViewSettings> 
             <igWPF:GridViewSettings UseNestedPanels="True" Orientation="Vertical"/> 
            </igWPF:XamDataGrid.ViewSettings> 
            <igWPF:XamDataGrid.FieldLayouts> 
             <igWPF:FieldLayout Key="layer1"> 
              <igWPF:FieldLayout.Fields> 
               <igWPF:Field Name="Id" Visibility="Visible"/> 
               <igWPF:Field Name="Name" Visibility="Visible"/> 
               <igWPF:Field Name="Place" Visibility="Visible"/> 
               <igWPF:Field Name="Mobile" Visibility="Visible"/> 
               <igWPF:Field Name="Level2CustomerInst" Visibility="Visible" IsExpandable="True" Label="Level2CustomerInst" IsSelected="True" IsPrimary="True" /> 
              </igWPF:FieldLayout.Fields> 
             </igWPF:FieldLayout> 
             <igWPF:FieldLayout Key="Level2CustomerInst" ParentFieldName="Level2CustomerInst" ParentFieldLayoutKey="layer1"> 
              <igWPF:FieldLayout.Fields> 
               <igWPF:Field Name="Address" Label="Address"/> 
               <igWPF:Field Name="Street" Label="Street"/>             
              </igWPF:FieldLayout.Fields> 
             </igWPF:FieldLayout> 
            </igWPF:XamDataGrid.FieldLayouts> 

           </igWPF:XamDataGrid> 

创建两个类如果你想在扩展子列表您可以尝试处理InitializeRecord事件并设置记录的IsExpanded属性:

private void TestDatagrid_OnInitializeRecord(object sender, InitializeRecordEventArgs e) 
    { 
     e.Record.IsExpanded = true; 
    } 
相关问题