0

10個程度の項目が入ったリストボックスを表示したい。アイテムを追加して更新するたびにList、少しではありますが顕著な遅延が発生し、UIがしばらくフリーズします。ObservableCollectionまた、の代わりにを使用してみListましたがItemsSource、問題は解決しませんでした。

私のリストボックスは本当に速く更新する必要があるので、私は本当にあなたの助けが必要です!:)

ここにいくつかのコードがあります:

public partial class MainPage : PhoneApplicationPage
{
    //private List<Word> Words = new List<Word>();
    ObservableCollection<Word> Words = new ObservableCollection<Word>();

    // Konstruktor
    public MainPage()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        ListBox1.ItemsSource = Words;

        for (int j = 0; j < 10; j++)
        {
            Words.Add(new Word(j.ToString()));
        }
    }
}

public class Word
{
    public String sWord { get; set; }

    public Word(String word)
    {
        this.sWord = word;
    }
}

XAML

<ListBox Name="ListBox1">
   <ListBox.ItemTemplate>
       <DataTemplate>
           <Button Content="{Binding sWord}" />
       </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>
4

1 に答える 1

0

問題の解決策を見つけました。遅延を修正するために、ListBox の代わりに StackPanel を使用し、次の方法でボタンを追加しています。

StackPanel1.Children.Add(new Button()
{
    Content             = "Hello World",
    BorderBrush         = new SolidColorBrush(Colors.Transparent),
    HorizontalAlignment = HorizontalAlignment.Left
});

でStackPanelをクリアできます

StackPanel1.Children.Clear();

ボタンにクリックイベントを追加すると、次のように機能します

foreach (Button btn in StackPanel1.Children)
{
    btn.Click += new RoutedEventHandler(Button_Click);
}

非常に簡単で、はるかに高速です。

于 2012-07-03T10:18:13.100 に答える