手动选择ListBoxItem

时间:2012-01-17 22:53:10

标签: windows-phone-7 listboxitem

我需要能够在Windows Phone 7中手动选择ListBox项。我的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>

这样我就可以实现包裹效果。

当我在WPF中执行此操作时,我订阅了ListBox.ItemContainerGenerator.StatusChanged事件。在此事件的事件处理程序中,我使用了:

  

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

我尝试为WP7做同样的事情并注意到:

  1. ListBox.ItemContainerGenerator不再公开StatusChanged事件。而是一个ItemsChanged事件,所以我处理了这个。
  2. 但是,当我调用ItemContainerGenerator.ContainerForitem(objInstance)或甚至是ItemContainerGenerator.ContainerFromIndex()时,我总是得到null。
  3. 添加,我已经在列表框中显示的类上覆盖了GetHashCode和Equals。

    想法。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是最佳方式,但这是我将如何做到这一点:

1)创建一个继承INotifyPropertyChanged接口的类(您可以通过google轻松找到如何使用它)。将您放入该类的ListBox中的信息包裹起来。

2)为该类创建一个IsSelected属性。

3)将类的IsSelected属性绑定到ListBox项的IsSelected属性。

4)现在你可以随时改变你创建的类的IsSelected属性,并且一切都会发生。