Самая простая вещь (на мой взгляд) - реализовать IEnumerable
public class MyClass : IEnumerable<MyClass>
{
public string MyText { get; set; }
public MyClass PreviousItem { get; set; }
IEnumerator<MyClass> IEnumerable<MyClass>.GetEnumerator()
{
for (var item = this; item.PreviousItem != null; item = item.PreviousItem)
yield return item;
}
public IEnumerator GetEnumerator()
{
return ((IEnumerable<MyClass>)this).GetEnumerator();
}
}
Тогда ваш код будет выглядеть следующим образом
public Window1()
{
MyClass item1 = new MyClass() {MyText = "No1"};
MyClass item2 = new MyClass() {MyText = "No2"};
MyClass item3 = new MyClass() {MyText = "No3"};
MyClass item4 = new MyClass() {MyText = "No4"};
item4.PreviousItem = item3;
item3.PreviousItem = item2;
item2.PreviousItem = item1;
DataContext = item4; // your first item
}