Search code examples
windows-phone-7windows-phone-8windows-phonewindows-phone-7.1.1

wp7 listbox selection


I have a listBox with 1000+ items.

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

in MyCustomItem xaml

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

Where IsSelected - one of property of my ViewModel. Converter return one of two style (first if item selected, second - if no)

Always work, but I know - it's very resource-intensive, and the wrong decision. How to do it right?


Solution

  • This post help me! Just override default ItemContainerStyle for my ListBox.

    I removed:

    metod OnSelectionChanged, UserControl MyCustomItem, converter for styles and

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

    from xaml.