0

前方リンクリストがあるとしましょう:

public class A
{
    public B Next { get; set; }

    public String Value { get; set; }

    public A(string value, B next)
    {
        this.Next = next;
        this.Value = value;
    }
}

public class B
{
    public A Next { get; set; }
    public int Value { get; set; }

    public B(int value, A next)
    {
        this.Next = next;
        this.Value = value;
    }
}

public partial class MyWindow : Window
{

    public A My_List{ get; set; }

    public MyWindow()
    {
        Program program = new Program();

        this.My_List = new A("value1", new B(1, new A("Value2", new B(2, new A("value3", new B(3, null))))));

        this.DataContext = this;
        InitializeComponent();
    }
}

*My_List* を Wpf で表示するにはどうすればよいですか? 私は試した:

<StackPanel>
    <StackPanel.Resources>
        <DataTemplate DataType="{x:Type WpfApplication2:A}" x:Key="A_Template">
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding Path=Value}" />
                <Label Content="---" />
                <Label Content="{Binding Path=Next.Value}" />
                <ItemsControl ItemsSource="{Binding Path=Next.Next}" ItemTemplate="{DynamicResource A_Template}">

                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>

                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </StackPanel.Resources>

    <ItemsControl   ItemsSource="{Binding Path=My_List}"
                    ItemTemplate="{StaticResource A_Template}">

        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</StackPanel>

*My_List* は最初の要素ではなく実際のリストでなければならないためだと思います。

編集:空のウィンドウ、出力なし、コンパイラエラーなし、ランタイム例外なし。

4

1 に答える 1

0

*My_List* を Wpf で表示するにはどうすればよいですか?

forAとして使用する場合は、次のように実装する必要があります。ItemsSourceItemsControlIEnumerableA

public class A : IEnumerable
{
    public B Next { get; set; }

    public String Value { get; set; }

    public A(string value, B next)
    {
        this.Next = next;
        this.Value = value;
    }

    #region IEnumerable Members

    private class AEnumerator : IEnumerator
    {
        private readonly A head;

        public AEnumerator(A head)
        {
            this.head = head;
        }

        #region IEnumerator Members

        public object Current { get; private set; }

        public bool MoveNext()
        {
            if (Current == null)
            {
                Current = head;
            }
            else
            {
                if (Current.GetType() == typeof(A))
                {
                    Current = ((A)Current).Next;
                }
                else
                {
                    Current = ((B)Current).Next;
                }
            }

            return Current != null;
        }

        public void Reset()
        {
            throw new NotImplementedException();
        }

        #endregion
    }

    public IEnumerator GetEnumerator()
    {
        return new AEnumerator(this);
    }

    #endregion
}
于 2013-01-30T07:29:56.943 に答える