выбор окна списка wp7

У меня есть listBox с более чем 1000 элементов.

в xaml

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

In cs

 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. Преобразователь возвращает один из двух стилей (первый, если элемент выбран, второй - если нет)

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


person jimpanzer    schedule 03.04.2013    source источник
comment
С точки зрения, основная проблема заключается в том, что у вас есть более 1000 элементов в списке. Вам действительно нужно так много элементов в списке. Можете ли вы разбить это на несколько списков?   -  person Ali Khalid    schedule 03.04.2013
comment
Нет, мне действительно нужно показать все элементы с функцией фильтра в одном ListBox. Я нашел решение и опубликовать его.   -  person jimpanzer    schedule 03.04.2013


Ответы (1)


Этот сообщение поможет мне! Просто переопределите ItemContainerStyle по умолчанию для моего ListBox.

Я удалил:

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

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

из ксамл.

person jimpanzer    schedule 03.04.2013