2009-09-24 78 views
1

我創建,將有其菜單項注入從不同的模塊菜單(我使用的複合應用程序庫:團結,棱鏡)。如何在WPF中對分層數據進行排序?

例子:

 
File 
- Open 
- New 
    - A (injected from ModuleA) 
    - B (injected from ModuleB) 
    - C (injected from ModuleC) 
- Exit 

因爲我不知道哪些項目將被注入做什麼,我需要以某種方式排序我的菜單項。我正在嘗試通過創建從MenuItem繼承的RankingMenuItem來實現此目的。 RankingMenuItem有一個額外的屬性Rank,它是一個整數。

我將「文件 - >退出」菜單項設置爲排名1000,並將「文件 - >打開」設置爲排名0,以便退出將始終顯示在文件菜單的底部,而打開將會總是出現在頂部。

我有麻煩的是,我想不通排序菜單層次的最佳途徑。我可以使用CollectionView輕鬆地對頂層進行排序,但我無法弄清楚如何將它應用到子項目中。

任何建議,將不勝感激。

回答

2

默認情況下,MenuItem.ItemsSource可以包含任何基於集合的集合。這可以是一個排序列表,例如,或一個collectionviewsource。如果集合中的項目是特定於域的(例如,不是MenuItem對象),那麼您的任務可能不是微不足道的。根據您的描述,聽起來好像您的模塊將一個簡單的MenuItem對象直接註冊到「New」MenuItem的Items中,從而無法執行排序。如果是這樣的話,我的建議是有一些像ObversableCollection這些項目被添加/刪除,並通過連接到「新建」菜單項的MenuItems屬性的CollectionViewSource來使用它。這應該允許你對其他模塊動態添加的菜單項進行排序(不過,實現這種排序的方式取決於你,例如需要模塊中的排序菜單項,或者你可以簡單地按字母順序排列一些產品特定的「權重」,以確保一些菜單項總是高於/低於其他「已知」菜單項排序。)

希望有所幫助。

+0

我們以類似的方式實施了我們的解決方案。很抱歉,遲到接受。 – 2010-05-06 19:03:55

相關問題