2011-07-27 58 views
1

我正在開發一個複雜的表單應用程序。每行在結尾處都有一個加號按鈕,應該在其下面添加一個新行。如果您需要我正在實施的示例,請查看iTunes和智能播放列表編輯對話框。它使用查詢和嵌套,這是我用來構建用戶友好的查詢構建器。關於如何在彼此之下嵌套行(在幾個空格上標籤)並將行添加到彼此之間的網格的任何提示?Silvelight:如何動態添加網格行之間的控件?

回答

0

你可以嘗試使用TreeView control

你可以代表每行作爲對象把它們放在一個ObservableCollection數據,然後將其綁定到TreeView的項目源。每個行對象也有一個Children屬性,其中包含嵌套行對象的ObservableCollection。

class Row 
{ 
    public ObservableCollection<Row> Children { get; set; } 

    // .... 
} 

partial class MainPage 
{ 
    public ObservableCollection<Row> Rows{ get; set; } 

    public MainPage() 
    { 
     //Add your initial rows 
     this.AddRow(new Row(...)); 
     this.AddRow(new Row(...)); 
     //... 

     this.InitializeComponents(); 
    } 

    public void AddRow(Row newRow, Row parentRow=null) 
    { 
     if(parentRow == null) 
     { 
      // Add new row to root of tree 
      this.Rows.Add(newRow); 
     } 
     else 
     { 
      //Add new row as child of an existing row of tree 
      parentRow.Children.Add(newRow); 
     } 
    } 
} 

<UserControl x:Class="MainPage" x:Name="mainPageUserControl"> 
    <TreeView ItemsSource="{Binding Rows, ElementName=mainPageUserControl}"> 
     <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <!-- Template the behaviour/look of your rows as needed --> 
     </HierarchicalDataTemplate> 
    </TreeView> 
</UserControl> 

要添加或刪除新行,你可以簡單地添加/從觀察集合刪除行對象。綁定到ObservableCollection意味着TreeView將自動更新自己,如果行被添加/刪除

+0

我現在就試試這個。謝謝! – sean