아래 메서드를 사용하여 TreeViewItem을 복제하려고 시도했지만 XamlWriter.Save()
에 도달하면 StackOverflowException이 발생합니다.StackOverflowException 사용자 정의 컨트롤을 복제하려고 할 때 XamlWriter.Save()를 사용할 때
이이 트리거 코드 : ViewTree 내 트 리뷰의 이름입니다
var b = Clone<TreeViewItem>(ViewTree.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem);
.
public static T Clone<T>(T from) {
string objStr = System.Windows.Markup.XamlWriter.Save(from);
System.IO.StringReader stringReader = new System.IO.StringReader(objStr);
System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader);
object clone = System.Windows.Markup.XamlReader.Load(xmlReader);
return (T)clone;
}
필자의 경우 데이터 바인딩 된 뷰 모델의 각 하위 항목에는 부모 컬렉션 뷰 모델에 대한 참조가 있습니다. 그게 문제 야? XamlWriter.Save에게 이것을 처리하도록 어떻게 가르 칠 수 있습니까? – ygoe
어쩌면 자식이없는'ParentReferenceTreeViewItem'과 같은 특수 노드를 만들 수 있습니다. 원하는 노드 만 가리키는 속성이 있어야합니다. 문제는 자식 노드에 부모 노드의 인스턴스가있는 경우 루프가 만들어지는 것입니다. –