【问题标题】:Updating ListBox causes delay更新 ListBox 会导致延迟
【发布时间】:2012-07-01 21:24:11
【问题描述】:

我想显示一个包含大约 10 个项目的列表框。每次我通过将项目添加到 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>

【问题讨论】:

  • 显示列表中显示的 DataTemplate / 类。如果你有太多的转换器/逻辑发生,你的性能就会很差。
  • 我更新了帖子。代码真的不多。
  • 你是如何添加项目的?
  • 只需在列表中添加一项即可:Words.Add(new Word("hello"));
  • 您能否提供更多代码来说明您将项目添加到 ObservableCollection 的方式?要优化您的 ListBox,您可以在 App.xaml 中创建 DataTemplate。

标签: windows-phone-7 listbox delay itemssource


【解决方案1】:

我找到了解决问题的方法。为了解决延迟问题,我现在使用 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);
}

非常简单,而且速度更快!

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2020-08-25
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多