一些主要代碼
<HierarchicalDataTemplate ItemsSource="{Binding Children}"><TextBlock Text="{Binding Text}"/></HierarchicalDataTemplate>然后是rss類
public class Rss { int id;public int Id { get { return id; } set { id = value; } } int parentId;//這個暫時用不到public int ParentId { get { return parentId; } set { parentId = value; } }string text;//這個用來顯示標題public string Text { get { return text; } set { text = value; } }string xmlUrl;//留著備用public string XmlUrl { get { return xmlUrl; } set { xmlUrl = value; } }public List<Rss> Children { get; set; } public Rss() { Children=new List<Rss>(); this.ParentId=-1; } }直接讀取文件都寫在主文件里了。
List<Rss> rsslist; public Window1() { InitializeComponent(); rsslist=new List<Rss>(); ReadOpml();//讀取default.opml tr_1.ItemsSource=rsslist; }PRivate void ReadOpml() {string str= System.AppDomain.CurrentDomain.BaseDirectory; if (File.Exists("default.opml")) { XmlDocument doc = new XmlDocument(); doc.Load("default.opml"); XmlNodeList otls = doc.GetElementsByTagName("outline"); goTolist(otls);//把數(shù)據(jù)讀取到list} else {//功能預留 MessageBox.Show("沒有opml文件,創(chuàng)建一個空的default.opml"); File.Create("default.opml"); } }//openopmlprivate void goTolist(XmlNodeList otls){for(int i = 0; i<otls.Count;i++){if(otls[i].Attributes.GetNamedItem("type").InnerText == "NFgroup"){ Rss tmprss=new Rss(); tmprss.Id=i;tmprss.Text=otls[i].Attributes.GetNamedItem("text").InnerText; createChilren(tmprss,i,otls); rsslist.Add(tmprss); }}}//goTolistprivate void createChilren(Rss tmprss,int i,XmlNodeList otls){ for(int j=i+1;j<otls.Count;j++){ if(otls[j].Attributes.GetNamedItem("type").InnerText == "NFgroup") return; tmprss.Children.Add(new Rss{Id=j,ParentId=i,Text=otls[j].Attributes.GetNamedItem("text").InnerText}); } }考慮到只有兩層所以就用循環(huán)遍歷取數(shù)據(jù),如果是多層的就要用到遞歸了。
下一步就是實現(xiàn)點擊條目顯示數(shù)據(jù)了。
新聞熱點
疑難解答