¿Podemos actualizar el contexto de datos de un control WPF en un hilo que no sea UI?Enhebrado WPF: ¿puedo actualizar el contexto de datos de un control en un hilo que no sea UI?
Digamos que tenemos un Label
que tiene MyClass
como contexto de datos, y se unen Content
a MyProperty
:
<Label Name="label" Content="{Binding MyProperty}" />
,
donde MyClass
es simplemente:
public class MyClass : INotifyPropertyChanged
{
int _myField;
public int MyProperty
{
get
{
return _myField;
}
set
{
_myField = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyProperty"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
En un subproceso no UI , podemos hacer myClass.MyProperty = "updated"
para actualizar el contenido de la etiqueta, pero no podemos hacer label.Content = "updated"
directamente. ¿Es eso correcto?
Mi propia respuesta:
Esto es lo que he encontrado:
- de un hilo no la interfaz de usuario, que no puede actualización de un control;
- De un hilo que no sea UI, puede actualizar las propiedades del contexto de datos de un control;
- Desde un subproceso que no sea UI, no se puede agregar elementos ao eliminar elementos de un
ObserverableCollection
que está vinculado a un control. Pero hay una solución : http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx
¿Podría darme más detalles sobre las colecciones? Gracias. – Shuo
Gracias, creo que tengo una solución aquí: http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx – Shuo
Utilicé ese también, pero hay casos en los que el código no funciona (algunos objetos wpf no heredan de DispatcherObject). – Femaref