0

У меня есть listBox с более чем 1000 предметами.wp7 listbox selection

в XAML

<ListBox 
//some code here 
SelectionChanged="OnSelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <controls:MyCustomItem/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

В сСт

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var item = lb.SelectedItem as MyCustomItem; 
     var vm = DataContext as ViewModel; 
     if (vm == null) return; 
     foreach (var it in vm.ItemsForBinding) 
     { 
      it.IsSelected = false; 
     } 
     item .IsSelected = true; 
    } 

в MyCustomItem XAML

<UserControl 
//Some code here 
Style="{Binding Path=IsSelected, Converter = {StaticResource BoolToStyle}}"> 
    <Border 
    </Border> 
</UserControl> 

Где IsSelected - один из собственности моего ViewModel. Конвертер возвращает один из двух стилей (первый, если выбран пункт, второй - если нет)

Всегда работайте, но я знаю - это очень ресурсоемкий и неправильное решение. Как это сделать правильно?

+0

С точки зрения главной проблемой является то, что у вас есть более 1000 элементов в списке. Вам действительно нужно, чтобы много элементов в списке. Можете ли вы разбить это на несколько списков? – alykhalid

+0

Нет, мне действительно нужно показать все элементы с функцией фильтра в одиночном ListBox. Я нашел решение и разместил его. – jimpanzer

ответ

0

Это post помогите мне! Просто переопределите элемент ItemContainerStyle по умолчанию для моего списка.

Я удалил:

Metod OnSelectionChanged, UserControl MyCustomItem, конвертер стилей и

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <controls:MyCustomItem/> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

из XAML.