2012-01-17 48 views
0

我需要能夠手動在Windows Phone的選擇,ListBox項7.我的列表框包含使用WrapPanel手動選擇一個ListBoxItem

<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()時,我總是得到空值。

剛剛添加,我已經在列表框中顯示的類上覆蓋了GetHashCode和Equals。

想法請。

回答

1

我不知道這是否是這樣做的最好的方法,但這裏是我會怎麼做:

1)創建它繼承INotifyPropertyChanged接口類(你可以找到如何通過輕鬆地使用它谷歌)。將你放入該類的ListBox中的信息包裹起來。

2)爲該類創建一個IsSelected屬性。

3)將該類的IsSelected屬性綁定到ListBox項目的IsSelected屬性。

4)現在您只需更改您創建的類的IsSelected屬性,並且所有事情都會自行發生。

+0

好主意,謝謝。除了我這樣做; ,異常由XamlParser拋出。 –

+0

如果在''中這樣做,它將不起作用,因爲IsSelected不是ListBox的屬性。您必須使用ItemTemplates在實際的ListBox中應用該屬性。 – mostruash