0

我嘗試實施HierarchicalDataTemplateself referencing table在Silverlight 4HierarchicalDataTemplate用於自參照表

enter image description here

它顯示了在像1級,而不是分層視圖TreeView的所有項目。它應該是3個級別的項目。

enter image description here

所以我卡住了怎麼辦呢...任何線索?謝謝!

<UserControl x:Class="TreeViewCRUD.MainPage" 
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"    
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:Crud="clr-namespace:TreeViewCRUD" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid> 
      <sdk:TreeView Height="403" Margin="0,0,0,0" Name="TreeView1" Background="Beige" > 
     <sdk:TreeView.ItemTemplate> 
      <sdk:HierarchicalDataTemplate ItemsSource="{Binding Divisions}" > 
       <TextBlock Text="{Binding Name, Mode=OneWay}" Margin="5,0"></TextBlock> 
      </sdk:HierarchicalDataTemplate>     
     </sdk:TreeView.ItemTemplate> 
    </sdk:TreeView> 
    </Grid> 
</UserControl> 

和C#

void client_GetDivisionsCompleted(object sender, MyService.GetDivisionsCompletedEventArgs e) 
     { 
      var lst = e.Result; 
      try 
      { 
       TreeView1.DataContext = lst; 
       // TreeView1.ItemsSource = lst; 
       TreeView1.ItemsSource = lst.Where(a=>a.DivisionID != null); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message.ToString()); 
       MessageBox.Show(ex.StackTrace.ToString()); 
      } 
     } 
+1

您具體在哪裏卡住?預期的行爲是什麼?目前的行爲與此有何不同? – cadrell0 2012-03-28 20:37:20

+0

@ cadrell0它爲我顯示TreeView中的所有項目,如1級而不是分層視圖。它應該是3個級別的項目。 – 2012-03-28 20:40:18

+0

@ cadrell0我剛更新了我的問題請看看。 – 2012-03-28 20:44:09

回答

1

我懷疑你的XAML是正確的(主要)和數據的問題。我認爲lst包含像

ID DivisionID Divisions1 
1  null  (List<Division>) 
2  1   (List<Division>) 
3  2   (List<Division>) 

一些數據,當你真正需要lst是什麼現在是

ID DivisionID Divisions1 
1  null  (List<Division>) 

LST [0] .Divisions1將

ID DivisionID Divisions1 
2  1   (List<Division>) 

最後LST [ 0] .Divisions1 [0] .Divisions1將是

ID DivisionID Divisions1 
3  2   (List<Division>) 

驗證來自WCF的數據是否與導航屬性保持一致。即使lst顯示了所有3個元素,而不是頂級的,您應該能夠過濾掉客戶端。

我注意到的最後一件事情是您正在使用ItemsSource="{Binding Divisions}"進行綁定。但是,在類圖中,屬性名稱是Divisions1

+0

感謝您的輸入!事實上,在WCF下我有這個:return db.Divisions.ToList();所以沒有什麼特別的。你能否建議我是否必須將Divisions錶轉換爲中間LIST或...?如果是的話,那該怎麼辦?你是否意味着在WCF下我必須建立你建議的結構? – 2012-03-28 21:02:17

+0

那麼我發現在RIA服務級別的解決方案http://stackoverflow.com/questions/9929050/recursive-select-via-linq最後一件事是sdk:HierarchicalDataTemplate – 2012-03-29 19:40:33