ツリービューにパスのリストを表示する WPF プロジェクトに取り組んでいます。propertyPaths (例: NetworkControl.AlternateIndexText.Value") パスには ID があります。
コンストラクター:
public MessageElement()
{
Children = new List<MessageElement>();
messageElements = new List<MessageElement>();
}
public MessageElement(int id, string name, List<MessageElement> children)
{
this.ID = id;
this.Name = name;
this.Children = children;
}
public MessageElement(int id, string path)
{
this.ID = id;
this.path = path;
}
ここでは、どのように解析を行っているかを示しています。
BuildTree メソッドに渡す IEnumerable propertyPath から子を作成しています。
public List<MessageElement> BuildTree(IEnumerable<string> propertyPath)
{
return (
from path in propertyPath // Ex: NetworkControl.AlternateIndexText.Value"
let splitPath = path.Split('.')
group path by path.Split('.')[0] into pathElementGroup
select new MessageElement(ID, path)
{
// ID = Id,
Name = pathElementGroup.Key, //name of each tree node
Children = BuildTree( //create child from the propertyPath
from propertyPathElement in pathElementGroup
where propertyPathElement.Length > pathElementGroup.Key.Length + 1
select propertyPathElement.Substring(pathElementGroup.Key.Length + 1))
}).ToList();
}
データを入力します。
public List<MessageElement> GetRequestTreeNodes()
{
messageElements.Add(new MessageElement(1, "NetworkControl.AlternateIndexText.Value"));
messageElements.Add(new MessageElement(2, "NetworkControl.AddressData.DestinationID"));
messageElements.Add(new MessageElement(2, "NetworkControl.AddressData.MessageOriginatorID.Value"));
}
ここでは、messageElements リストから BuildTree メソッドに渡すリストを準備しています。
String[] propertyPath = messageElements.Select(I => Convert.ToString(I.path)).ToArray();
// int[] idList = messageElements.Select(I => (I.id)).ToArray();
List<MessageElement> nodeList = BuildTree(propertyPath);
return nodeList;
ツリー ノードの作成に使用している propertyPath リストと Id の間の関連付けを作成するにはどうすればよいですか。たとえば、MessageElement(1, "NetworkControl.AlternateIndexText.Value"));