1

ListBoxWindows Phone アプリに があります。ListBoxItemボタン アクションでは、ListBox呼び出された のすべてに変換と名前を設定する必要がありますlb

私のデータソースは

var items = new ObservableCollection<string>();
for (int i = 0; i < 10; ++i)
{
    items.Add("Item " + i);
}
lb.ItemsSource = items;

リストボックスのRenderTransformそれぞれにa を追加するコードがありますListBoxItem

for (int i = 0; i < items.Count;++i )
{
    var item = this.lb.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
    item.RenderTransform = new CompositeTransform();
    item.Name = i.ToString() //needed for storybord
    //another stuff
}

そしてそれは正常に動作します。問題は、最初にリストにアイテムを挿入する必要があることです。for ループの前に呼び出すitems.Insert(index,"test")と、項目が null の場合に例外が発生しますi==index。新しいアイテムをいつ挿入しても問題ありません。そのアイテムに対して常に null を取得します。

私は何を間違っていますか?ListBoxまたは、アクセスしようとする前に新しいアイテムを挿入するときに待機する必要があるイベントはありListBoxItemますか?

編集:コードを抽出してソリューションに入れました: https://dl.dropboxusercontent.com/u/73642/PhoneApp2.zip。最初に偽のアイテムを新しいソリューションに挿入し、それをフェードアウトして、アニメーションを使用して元のアイテムをその位置に移動します。

4

2 に答える 2

-1

Dispatcher の処理が完了するのを待つ (新しいアイテムが追加されたために UI を更新する)

this.Dispatcher.BeginInvoke(() =>
{
   //Code Here
});

UI を更新せずにリストボックスにアイテムを追加するなど、UI を操作すると、UI を対象とするコードを実行できなくなります。

編集:プロジェクトが機能するためのコードは次のとおりです

 private void Button_Click(object sender, RoutedEventArgs e)
    {            
        start = Int32.Parse(from.Text);
        end = Int32.Parse(to.Text);

        fake = items[start];
        //items.Insert(end, fake);

        this.Dispatcher.BeginInvoke(() =>
        {
            for (int i = 0; i < items.Count; ++i)
            {
                var item = this.lb.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
                item.Name = i.ToString();
            }


            (this.lb.ItemContainerGenerator.ContainerFromIndex(end) as ListBoxItem).RenderTransform = new CompositeTransform();
            (this.lb.ItemContainerGenerator.ContainerFromIndex(end) as ListBoxItem).Name = "listBoxItem1";


            (this.lb.ItemContainerGenerator.ContainerFromIndex(start) as ListBoxItem).Name = "listBoxItem";

            sbListBox.Begin();
        });

    }
于 2013-04-12T22:09:13.233 に答える