0

我想显示一个包含大约 10 个项目的 ListBox。每次我通过向 a 添加项目来更新它时,List它都会导致一点但明显的延迟,并且 UI 会冻结一段时间。我还尝试使用 aObservableCollection而不是 aList作为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>
4

1 回答 1

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);
}

非常容易而且快得多!

于 2012-07-03T10:18:13.100 回答