visual studio que puede programacion presentacion hacer ejemplos desventajas con animaciones wpf data-binding

que - visual studio wpf



¿Cuál es una buena manera de mostrar datos dinámicos en WPF? (1)

Estoy luchando con la mejor manera de manejar una aplicación WPF que tenga actualizaciones dinámicas de datos. ¿Debo usar el rico enlace de datos proporcionado por WPF o no?

Simplificaré mi dominio de problemas tanto como sea posible en la discusión a continuación, y mencionaré brevemente algunas soluciones. Estoy muy interesado en los comentarios que esta comunidad pueda brindar.

Dominio de problemas simplificado : supongamos que tiene un sistema con aproximadamente 1.000 elementos, cada uno con un " nombre " único, y una " velocidad " y " ubicación " dinámicas. Los datos de estos elementos se actualizan 60 veces por segundo. Desea mostrar esta información al usuario en una variedad de UI, desde "etiquetas que muestran números" hasta diales / medidores / indicadores gráficos / etc. Trabajo perfecto para WPF: separe los elementos visuales del resto de la aplicación. ¿Cómo diseñarías este sistema?

Mi primera solución : mi primera solución fue definir un objeto con propiedades de velocidad y ubicación (dobles) llamado " DataItem ", definir una interfaz con una propiedad de nombre (cadena). Los controles que muestran los datos tendrían que implementar la interfaz de nombre, se creó un "DataManager" que escaneó en busca de FrameworkElements que implementó la interfaz, elaboró ​​una lista con un nombre / pares FrameworkElements en el momento de la inicialización. Luego, 60 veces por segundo, se actualizó la lista de 1,000 DataItems y el DataContext de cada FrameworkElement coincidente se estableció en el objeto DataItem. Esto funcionó, el rendimiento fue aceptable (particularmente si los datos no siempre cambiaban).

Mi segunda solución abordó el problema de que los controles de IU en la primera solución tenían que implementar alguna interfaz, yuk. Quiero usar controles WPF no modificados listos para usar (en algunos casos). Entonces, la segunda solución fue definir una "Propiedad adjunta" (la puse en el objeto DataManager), así que podrías - en xaml - hacer cosas como

<Label DataManager.Name = "objectname" Content="{Binding}" />

De alguna manera, esta solución todavía no parece correcta. Mi tercera solución fue estudiar la implementación de un DataSourceProvider personalizado. No tuve éxito No pude entender cómo era el modelo de proveedor de fuente de datos y cómo se usaría en este caso.

En este momento, estoy mirando el proyecto de visualización de datos dinámicos CodePlex publicado por Microsoft Research. Ese proyecto se trata de trazar / graficar datos dinámicos, pero podría haber algunas ideas allí. Así que aquí estoy en StackOverflow, normalmente un lugar con preguntas cortas y respuestas rápidas. :-)

Soy muy nuevo en WPF y agradecería cualquier pensamiento que alguien tenga sobre estos temas. Tenga en cuenta que el dominio del problema especificado aquí está simplificado, por lo que necesito una solución sólida. En realidad, hay muchos tipos diferentes de objetos de datos, cada uno con diferentes propiedades; y las actualizaciones de datos no son la misma tasa para cada objeto, y los controles de la interfaz de usuario muestran elementos individuales y grupos de elementos, los datos provienen de muchas fuentes, etc.


Ya casi estás ahí. Desea vincular los datos en dos niveles.

En primer lugar, haga que su DataItem implemente INotifyPropertyChanged o INotifyPropertyChanged se deriven de DispatchingObject e implemente las propiedades de dependencia para cada uno de los valores que desea vincular a

Segundo: mantenga todos sus DataItem en uno de ObservableCollection<DataItem> o en una DataTable. Necesita una colección que admita INotifyCollectionChanged o IBindingList .

En tercer lugar, utilice algún tipo de control de contenedor (listbox, control de cuadrícula 3rd pary, etc.) para vincular la lista de DataItem s a su aplicación

Cuarto: defina un DataTemplate para darle a cada uno de los DataItem una apariencia visual

Quinto: si es necesario, utilice DataTemplateSelector para elegir dinámicamente DataTemplate para diferentes tipos de DataItem s

Aquí hay un poco de xaml para que comiences

<ListBox ItemsSource="{Binding ...}" ItemTemplateSelector="{StaticResource DTSelector}">