更新ListBox会导致延迟

时间:2012-07-01 21:24:11

标签: windows-phone-7 listbox delay itemssource

我想显示一个包含大约10个项目的ListBox。每次我通过向List添加项目来更新它时,它会导致一点但明显的延迟,并且UI会冻结一段时间。我还尝试使用ObservableCollection代替List作为ItemsSource,这无法解决问题。

我的ListBox必须快速更新,所以我真的需要你的帮助,拜托! :)

以下是一些代码:

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>

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。为了解决延迟,我现在使用StackPanel而不是ListBox,并按以下方式添加我的按钮:

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

您可以使用

清除StackPanel
StackPanel1.Children.Clear();

向按钮添加Click事件就像这样

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

非常简单,快得多!