Pregunta

En un proyecto de prueba que he logrado columnas AutoGenerate WPF DataGrid en el siguiente escenario, donde los datos se almacenan en un diccionario y la unión se realiza a través de PropertyDescriptors:

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

}

El problema que estoy teniendo es en mi proyecto de la vida real que estoy usando MVVM por lo que es Personas modelo de vista que hereda ViewModelBase y por lo tanto no pueden heredar Lista . He intentado implementar IList en lugar de una lista interna y establecer explícitamente el DataContext a un IList de referencia, pero que no funcionó.

He visto un puesto similar en la unión se forma un triunfo DataGridView aquí , por lo que me pregunto si el mismo tipo de lógica se aplica en WPF y sobre todo, lo que causa exactamente la implementación ICustomTypeDescriptor para ser recogidos al heredar List que falta en las que simplemente implementa IList < T> en su lugar.

¿Fue útil?

Solución

El DataGrid utiliza el CollectionView para su colección para generar las propiedades. Más específicamente, se lanza el CollectionView a IItemProperties, que la CollectionView por defecto no implementa. Si no se implementa IList (no el genérico), entonces el CollectionView por defecto será usado.

Por lo tanto, la implementación de la interfaz IList no genérico debería solucionar este implementos (List<T> tanto, que es por qué funciona si se derivan de List<Person>).

Otros consejos

Dado que no ha mencionado ya, que tenía un problema relacionado, donde las columnas de la DataGrid no estaban siendo cuando no había filas generada automáticamente; resulta que la DataGrid no estaba mirando a mi implementación IItemProperties en absoluto (no sé por qué), pero estaba usando exclusivamente la aplicación ICustomTypeDescriptor en cada objeto fila individual para generar las columnas, que trabaja demasiado, pero los resultados en no ser sin columnas, cuando no hay filas.

La solución fue implementar ITypedList (Salí de la aplicación IItemProperties demasiado por si acaso) en el tipo de colección. Ahora consigo columnas generadas adecuadamente para mí en si o no hay filas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top