Silverlight 4.0 加载一个大的silverlight树视图(silverlight大师的问题!)

Silverlight 4.0 加载一个大的silverlight树视图(silverlight大师的问题!),silverlight-4.0,ria,Silverlight 4.0,Ria,我有一张6400行的桌子。这是一个父子表,它有一个外键,在EF中是一个自关联引用 对于这个项目,必须加载所有树,当节点展开时加载数据对我来说不是一个解决方案 我试图一次加载所有节点/树,但它超过了maximun项:InnerException消息是“在对象图中可以序列化或反序列化的最大项数是”65536“ 然后,我尝试递归加载数据,但建立了最大simultanius连接http://msdn.microsoft.com/en-us/library/cc304129%28VS.85%29.aspx

我有一张6400行的桌子。这是一个父子表,它有一个外键,在EF中是一个自关联引用

对于这个项目,必须加载所有树,当节点展开时加载数据对我来说不是一个解决方案

我试图一次加载所有节点/树,但它超过了maximun项:InnerException消息是“在对象图中可以序列化或反序列化的最大项数是”65536“

然后,我尝试递归加载数据,但建立了最大simultanius连接http://msdn.microsoft.com/en-us/library/cc304129%28VS.85%29.aspx. 这是因为loadoperation是异步的,递归以非并行方式运行

最后,我写了这段代码来加载数据,它工作得很慢,但我认为这是一个肮脏的解决方案:

Private Sub loadOperation_Completed(ByVal sender As Object, ByVal e As EventArgs)

        Dim localloadOperation As LoadOperation(Of dimActivitats) = DirectCast(sender, LoadOperation(Of dimActivitats))

        If Not localloadOperation.HasError Then
            Dim llista = localloadOperation.Entities.ToList
            If llista.Any AndAlso llista.First.idSubrogatPare Is Nothing Then
                activitatsTree = llista
                TreeViewTaula.DataContext = activitatsTree
            End If

            For Each i In llista
                elementsWaitingForExpand.Push(i)
            Next
        End If

        Dim take10 = 10
        Dim IdsParentListOfElementsToProcessNow As New List(Of Integer)
        While elementsWaitingForExpand.Count > 0 And take10 > 0
            take10 -= 1
            IdsParentListOfElementsToProcessNow.Add(elementsWaitingForExpand.Pop.idSubrogat)
        End While
        Dim q2 = CActx.GetDimActivitatsListChildQuery(IdsParentListOfElementsToProcessNow)
        loadOperation = CActx.Load(Of dimActivitats)(q2)
        AddHandler loadOperation.Completed, AddressOf loadOperation_Completed

        ProgressBarTaula.Value = CActx.dimActivitats.Count

    End Sub
我在找更优雅的信号灯?班长排队

在这里,您可以看到previeus解决方案由于simultanius连接而引发错误:

Private Sub loadOperation_Completed(ByVal sender As Object, ByVal e As EventArgs)
    Try
        Dim localloadOperation As LoadOperation(Of dimActivitats) = DirectCast(sender, LoadOperation(Of dimActivitats))

        If Not localloadOperation.HasError Then
            Dim llista = localloadOperation.Entities.ToList
            If llista.Any AndAlso llista.First.idSubrogatPare Is Nothing Then
                activitatsTree = llista
                TreeViewTaula.DataContext = activitatsTree

            End If

            TreeViewTaula.Dispatcher.BeginInvoke(New loadLlistaDelegate(AddressOf loadLlista), llista)
        End If
    Catch ex As Exception
    End Try
End Sub

Private Delegate Sub loadLlistaDelegate(ByVal llista As List(Of dimActivitats))
Private Sub loadLlista(ByVal llista As List(Of dimActivitats))
    For Each item In llista
        For Each fill In item.dimActivitatsChildren
            Dim q2 = CActx.GetDimActivitatsChildQuery(fill.idSubrogat)
            Dim newloadOperation = CActx.Load(Of dimActivitats)(q2)
            AddHandler newloadOperation.Completed, AddressOf loadOperation_Completed
        Next
    Next
End Sub

您有没有想过以更优雅的方式重写此代码?

您在web.config中的服务行为中是否将maxItemsInObjectGraph设置为最大值?e、 g

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <!--The service behavior for the RIA Service-->
        <behavior name="RIAServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer **maxItemsInObjectGraph="2147483647"** />

如果在节点展开时加载数据不是一个选项,那么最好使用datagrid而不是treeview,并用过滤器/组显示层次结构?树不平衡,子树高度可能较深。你知道一种构造这个结构的方法吗?嗨,凯文,我把maxItemsInObjectGraph改成了maximun值。问题是异步调用导致的并行查询数呈指数增长。我已经用一个全局变量队列解决了这个问题。我要把项目转移到lightswitch。谢谢。