2012-07-01 2 views
0

Я хочу отобразить ListBox с примерно 10 элементами в нем. Каждый раз, когда я обновляю его, добавляя элемент в List, он вызывает небольшую, но заметную задержку, и пользовательский интерфейс замерзает на некоторое время. Я также попытался использовать ObservableCollection вместо List как ItemsSource, что не помогло устранить проблему.Обновление ListBox вызывает задержку

My 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> 
+0

показать свой DataTemplate/класс, который отображается в списке. Если у вас слишком много конвертеров/логики, у вас будет плохое перфоманс. –

+0

Я обновил сообщение. Это действительно не много кода. – Stacksatty

+0

Как вы добавляете предметы? –

ответ

0

Я нашел решение моей проблемы. Чтобы устранить задержку я теперь с помощью StackPanel вместо того, чтобы ListBox и добавить свои кнопки следующим образом:

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

Очень легко и намного быстрее!

Смежные вопросы