2012-07-10 10 views
12

Sto scrivendo un'app di Windows 8 Metro. Sto cercando di disegnare un GridView con tre gruppi. Voglio che uno di questi gruppi disponga diversamente i propri elementi rispetto agli altri. Ho usato i selettori in precedenza in WPF, quindi ho pensato che sarebbe stato un buon percorso. Così ho provato il GroupStyleSelector e ho trovato questo example on MSDN:Come posso creare gruppi in un GridView Metro utilizzando layout diversi?

public class ListGroupStyleSelector : GroupStyleSelector 
{ 
    protected override GroupStyle SelectGroupStyleCore(object group, uint level) 
    { 
    return (GroupStyle)App.Current.Resources["listViewGroupStyle"]; 
    } 
} 

Così ho modificato/esteso su di esso da qualcosa che lo soddisferebbe:

CS:

public class ExampleListGroupStyleSelector : GroupStyleSelector 
{ 
    public ExampleListGroupStyleSelector() 
    { 
    OneBigItemGroupStyle = null; 
    NormalGroupStyle = null; 
    } 

    public GroupStyle OneBigItemGroupStyle { get; set; } 
    public GroupStyle NormalGroupStyle { get; set; } 

    protected override GroupStyle SelectGroupStyleCore(object group, uint level) 
    { 
    // a method that tries to grab an enum off the bound data object 
    var exampleListType= GetExampleListType(group); 

    if (exampleListType== ExampleListType.A) 
    { 
     return OneBigItemGroupStyle; 
    } 
    if (exampleListType== ExampleListType.B|| exampleListType== ExampleListType.B) 
    { 
     return NormalGroupStyle; 
    } 

    throw new ArgumentException("Unexpected group type"); 
    } 
} 

XAML:

<Page.Resources> 
    <ExampleListGroupStyleSelector 
    x:Key="ExampleListGroupStyleSelector" 
    OneBigItemGroupStyle="{StaticResource OneBigGroupStyle}" 
    NormalGroupStyle="{StaticResource NormalGroupStyle}" /> 
</Page.Resources> 
<GridView 
    ItemsSource="{Binding Source={StaticResource exampleListsViewSource}}" 
    GroupStyleSelector="{StaticResource ExampleListGroupStyleSelector}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel 
       Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 

Ma il gruppo che mi è stato assegnato nel selettore è null o un DependencyObject tha Non riesco a ottenere alcun dato. Come posso prendere una decisione intelligente su come cambiare il GroupStyle se non mi viene data alcuna informazione. C'è un modo per passare una proprietà attraverso una proprietà associata o qualcosa del genere?

risposta

1

Basato su questo forum thread è possibile estrarre l'oggetto lanciandolo in ICollectionView e accedendo alla proprietà .Group in cui si otterrà l'oggetto a cui è stato associato il gruppo. Ciò consente una decisione intelligente sul modello. Tuttavia, non funziona ancora per me (o per le altre persone nel thread) poiché viene applicato un solo stile nonostante il fatto che vengano restituiti stili diversi.

Modifica: risulta che GroupTemplate non è destinato alla produzione di gruppi diversi. È inteso per cambiare la vista del gruppo per esempio nella vista scattata o casi simili in cui tutti i gruppi cambiano.

Problemi correlati