Domanda

Ho una vista elenco che mostra i dati usando il gridview. Questo elenco mostra i dati tipici delle viste della griglia. Molti dati visualizzati in righe e colonne. Tuttavia, in alcune righe non ho dati da visualizzare, nelle colonne. Vorrei scambiare il modello di elemento per quella riga e visualizzare un altro modello per l'intera riga che visualizzerebbe qualcosa come "riga vuota" oppure " riga vuota " per il testo e anche lo stile dell'intera riga non delle singole celle.

Ho provato a usare questo post: http://cloudstore.blogspot.com/2008/06/creating-custom-view-mode-that-supports.html .

Quindi ho una vista personalizzata per la vista elenco. Fondamentalmente, ho eseguito la sottoclasse della classe GridView e sull'override del metodo PrepareItems, posso selezionare il nuovo modello che voglio visualizzare per una particolare riga o il modello predefinito. Tuttavia, quando provo a selezionare un nuovo modello, il gridview non mostrerà mai nulla per quella riga. Verrà comunque visualizzato se utilizzo il modello predefinito. Suppongo che il layout di GridView interferisca con le mie impostazioni del modello per la riga che voglio scambiare. È possibile o dovrò creare una vista personalizzata che imita GridView e non sottoclasse la classe GridView? Vorrei mantenere le colonne come sono senza troppe rielaborazioni. Qualche suggerimento o qualcuno ha esperienza con questo tipo di scenario?

È stato utile?

Soluzione 2

Okay, ecco cosa ho fatto per risolvere il mio problema, tuttavia ciò comporterà delle rielaborazioni da parte mia. Ho sostituito con la mia visualizzazione elenco con un controllo articoli. Quindi non sto più usando GridView della vista elenco. Invece ho definito un GridViewColumnCollection con le mie colonne impostate su come le volevo.

Per la mia intestazione ho usato un GridViewHeaderRowPresenter con le proprietà delle colonne associate a GridViewColumnCollection. Questo si occupa delle intestazioni di colonna.

Sotto la mia intestazione inserisco ItemsControl che è associato al mio elenco di articoli. Tuttavia, ora uso un DataTemplateSelector che sostituirà il modello in base all'elemento e alle sue proprietà. Se non hai familiarità con il selettore DataTemplate vai qui: data selettore di modelli

Fondamentalmente, il mio modello predefinito per gli elementi nell'elenco è un GridViewRowPresenter la cui proprietà delle colonne è associata a GridViewColumnCollection. Questo lo mantiene in linea con le intestazioni. Tuttavia, posso ancora scambiare il modello per una riga in modo che sia qualcos'altro tramite il Selettore modello dati. E questo risolve il mio problema.

Tuttavia, ora devo rielaborare una visualizzazione elenco con una visualizzazione griglia che avevo disegnato e utilizzare questo metodo. Quindi questo non viene senza alcun costo.

Altri suggerimenti

È possibile utilizzare DataTriggers. Usa il codice in questo modo (cambiando i modelli a seconda che il valore di SomeItemProperty sia 0 o no):

<DataTemplate x:Key="MyItemTemplate">
    <StackPanel>
        <StackPanel Name="normalStackPanel">
            <!-- template for normal row -->
        </StackPanel>
        <StackPanel Name="emptyStackPanel" Visibility="Collapsed">
            <!-- template for empty row -->
        </StackPanel>
    </StackPanel>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding SomeItemProperty}" Value="0">
            <Setter TargetName="normalStackPanel" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="emptyStackPanel" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

Spero che sia d'aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top