2010-04-23 61 views
1

邏輯路徑我有地理對象的結構:獲取從樹狀其中有HierarchicalDataTemplate

Country 
Areas, 
Provinces, 
Cities 
and Hotels 

國家擁有的地區,地區有各省,各省有城,並有酒店。 我要點擊城市節點我想獲得邏輯路徑,例如:法國,Provanse,SomeProvince,Montpellier,Grand Hotel。

每個類都有字段:名稱,代碼河畔listOf ...

樹視圖的偉大工程,但這種方法並不:

private void structureTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
     { 
if (structureTree.SelectedItem is Hotel) 
      { 
       objectCode = ((Hotel)structureTree.SelectedItem).Code; 
       TreeViewItem item = e.OriginalSource as TreeViewItem; 
       DependencyObject parent = VisualTreeHelper.GetParent(item); 
       dlgEditHotel(objectCode, structureTree.Parent.ToString()); 
      } 
      } 

`**structureTree.SelectedItem as TreeViewItem **` 

給我空的時候我會在一些區域中單擊,省,市或酒店

回答

0

您可以將樹項目的名稱存儲在它們的標記或某處 並以SelectedItemChanged遞歸遍歷該樹到最頂端的項目並構建路徑字符串。

+0

是的,但如果用戶點擊項目,從另一個節點和不同類型...例如。我的路徑字符串看起來像法國,Provanse,SomeProvince,他會點擊德國/拜仁(此節點之前已擴展)? – user278618 2010-04-25 11:10:03

+1

不會改變的東西 - 你仍然需要建立從最低項目的路徑(點擊「拜仁」 - >拜仁的父母*節點是「德國」,你會建立一個字符串「德國\拜仁」 – Axarydax 2010-04-25 13:59:02

+0

這就是我想要的!:)但是當我點擊拜仁時如何獲得德國隊? – user278618 2010-04-25 16:22:50

0

您可以讀取每個TreeviewItem的DataContext屬性,並獲取該項目(國家,地區,省份,城市等)。讀取名稱(例如),並在遍歷樹時遞歸地追加到路徑字符串中。

0

我創建了一個樹狀如下:

<TreeView Name="tree"> 
      <TreeViewItem Header="Country" Selected="GetName"> 
       <TreeViewItem Header="Areas" Selected="GetName"> 
        <TreeViewItem Header="Provinces" Selected="GetName"> 
         <TreeViewItem Header="Cities" Selected="GetName"> 
          <TreeViewItem Header="Hotels" Selected="GetName"> 
          </TreeViewItem> 
         </TreeViewItem> 
        </TreeViewItem> 
       </TreeViewItem> 

      </TreeViewItem> 

     </TreeView> 

現在GetName方法會做這樣的事情:

private void GetName(object sender, RoutedEventArgs e) 
     { 
      TreeViewItem item = (TreeViewItem)sender; 
      name = item.Header + "." + name; 
      if (!(item.Parent is TreeViewItem)) 
      { 
       MessageBox.Show(name); 
      } 

     } 

最終的消息框將顯示名稱爲

Country.Areas.Provinces.Cities.Hotels。

我希望這是你想要的。