/// <typeparam name="T">指定对象类型</typeparam> /// <param name="source">TreeNode对象</param> /// <param name="target">指定对象</param> /// <param name="nameProperty">显示的对象属性</param> /// <param name="childsProperty">指定对象的子对象</param> /// <returns>TreeNode</returns> public static TreeNode Parse <T>(this TreeNode source, T target, Expression <Func <string> > nameProperty, Expression <Func <IEnumerable <T> > > childsProperty) { PropertyInfo propName = PropertySupport.ExtractProperty(nameProperty); PropertyInfo propChilds = PropertySupport.ExtractProperty(childsProperty); try { if (target == null) { throw new NullReferenceException("解析的目标不能为空!"); } TreeNode node = new TreeNode(); string nodeName = propName.GetValue(target, null).ToString(); node.Name = nodeName; object obj = propChilds.GetValue(target, null); if (obj != null && obj is IEnumerable <T> ) { foreach (var item in obj as IEnumerable <T> ) { var cNode = node.Parse(item, nameProperty, childsProperty); cNode.Target = item; cNode.Parent = node; node.Childs.Add(cNode); } } node.Target = target; return(node); } catch { throw; } }
/// <summary> /// Raises this object's PropertyChanged event. /// </summary> /// <typeparam name="T">The type of the property that has a new value</typeparam> /// <param name="propertyExpression">A Lambda expression representing the property that has a new value.</param> protected void RaisePropertyChanged <T>(Expression <Func <T> > propertyExpression) { var propertyName = PropertySupport.ExtractPropertyName(propertyExpression); this.RaisePropertyChanged(propertyName); }