Вручную выбрав ListBoxItem - PullRequest
       7

Вручную выбрав ListBoxItem

0 голосов
/ 18 января 2012

Мне нужно иметь возможность вручную выбирать элементы ListBox в Windows Phone 7. Мой ListBox содержит следующий стиль, который использует WrapPanel

   <Style TargetType="ListBox">
                        <Setter Property="ItemsPanel">
                            <Setter.Value>
                                <ItemsPanelTemplate>
                                    <[WP7Panels:WrapPanel][2] />
                                </ItemsPanelTemplate>
                            </Setter.Value>
                        </Setter>
                        <Setter  Property="ScrollViewer.HorizontalScrollBarVisibility"  Value="Disabled"  />
                    </Style>

, чтобы я мог реализовать упаковкуeffect.

Когда я сделал это в WPF, я подписался на событие ListBox.ItemContainerGenerator.StatusChanged.В обработчике этого события я использовал:

var obj = ListBox.ItemContainerGenerator.ContainerForItem (objInstance) as ListBoxItem;if (obj! = null) {obj.IsSelected = true;}

Я попытался сделать то же самое для WP7 и заметил, что:

  1. ListBox.ItemContainerGenerator больше не предоставляет событие StatusChanged.Вместо этого есть событие ItemsChanged, поэтому я обработал его.
  2. Однако, когда я вызываю ItemContainerGenerator.ContainerForitem (objInstance) или даже ItemContainerGenerator.ContainerFromIndex (), я всегда получаю ноль.

Просто добавлю, я переопределил GetHashCode и Equals для класса, который представлен в списке.

Идеи, пожалуйста.

1 Ответ

1 голос
/ 18 января 2012

Я не уверен, что это лучший способ сделать это, но вот как я бы это сделал:

1) Создайте класс, который наследует интерфейс INotifyPropertyChanged (Вы можете найти, как его легко использоватьчерез гугл).Оберните вашу информацию, которую вы поместили в свой ListBox в этом классе.

2) Создайте свойство IsSelected для этого класса.

3) Присвойте свойство IsSelected класса к свойству IsSelected элементов ListBox.

4) Теперь вы можете просто изменить свойство IsSelected класса, который вы создали, когда захотите, и все происходит само.

...