首页 > 学院 > 开发设计 > 正文

结合读取opml ,把数据链接到treeview

2019-11-08 19:43:31
字体:
来源:转载
供稿:网友

一些主要代码

<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);//把数据读取到list} else {//功能预留 MessageBox.Show("没有opml文件,创建一个空的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}); } }

考虑到只有两层所以就用循环遍历取数据,如果是多层的就要用到递归了。 这里写图片描述 下一步就是实现点击条目显示数据了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表