Domanda

In un progetto di test sono riuscito a colonne AutoGenerate WPF DataGrid nel seguente scenario, in cui i dati vengono memorizzati in un dizionario e legatura viene eseguita tramite PropertyDescriptors:

public class People:List<Person>{
     ...
}
public class Person:Dictionary<string,string>,INotifyPropertyChanged,ICustomTypeDescriptor
{

}

Il problema che sto avendo è nel mio progetto di vita vera che sto usando MVVM quindi è La gente ViewModel che eredita ViewModelBase e quindi non posso elencare ereditare . Ho provato attuazione IList invece con una lista interna e impostando esplicitamente il DataContext a un IList di riferimento ma che non ha funzionato.

Ho visto un post simile sul legame si forma una vittoria DataGridView qui , quindi mi chiedo se lo stesso tipo di logica si applica a WPF e in primo luogo, ciò che provoca esattamente l'attuazione ICustomTypeDescriptor per essere prelevati quando ereditare List che manca quando semplicemente implementa IList < T>, invece.

È stato utile?

Soluzione

Il DataGrid utilizza il CollectionView per la vostra collezione di generare le proprietà. Più in particolare, si proietta l'CollectionView a IItemProperties, che l'CollectionView di default non implementa. Se non implementare IList (non quella generica), allora la CollectionView di default verrà utilizzato.

Quindi, implementando l'interfaccia IList non generico dovrebbe risolvere questo (attrezzi List<T> sia, è per questo che funziona se si deriva da List<Person>).

Altri suggerimenti

Dal momento che non è menzionato già, ho avuto un problema correlato in cui le colonne del DataGrid non venivano generati automaticamente quando non c'erano le righe; si scopre che il DataGrid non stava guardando la mia implementazione IItemProperties a tutti (non so perché), ma stava usando esclusivamente l'attuazione ICustomTypeDescriptor su ogni oggetto singola riga per generare le colonne, che lavora troppo, ma i risultati in là dell'essere senza colonne quando non ci sono righe.

La soluzione era quella di implementare ITypedList (ho lasciato l'attuazione IItemProperties anche nel caso) sul tipo di raccolta. Ora ho le colonne correttamente generati per me in se o non ci sono file.

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