Pouvons-nous mettre à jour le contexte de données d'un contrôle WPF dans un thread non-UI?Threading WPF: puis-je mettre à jour le contexte de données d'un contrôle dans un thread non-UI?
Disons que nous avons un Label
qui a MyClass
comme contexte de données, et de se lier Content
à MyProperty
:
<Label Name="label" Content="{Binding MyProperty}" />
,
où MyClass
est tout simplement:
public class MyClass : INotifyPropertyChanged
{
int _myField;
public int MyProperty
{
get
{
return _myField;
}
set
{
_myField = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyProperty"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Dans un thread non-UI , nous pouvons faire myClass.MyProperty = "updated"
pour mettre à jour le contenu de l'étiquette, mais nous ne pouvons pas faire label.Content = "updated"
directement. Est-ce exact?
Ma réponse:
Voici ce que j'ai trouvé:
- d'un fil non interface utilisateur, vous ne pouvez pas mise à jour d'un contrôle;
- À partir d'un thread non-interface utilisateur, peut mettre à jour les propriétés du contexte de données d'un contrôle;
- A partir d'un thread non-interface utilisateur, ne peut pas ajouter ou supprimer des éléments d'un
ObserverableCollection
lié à un contrôle. Mais il y a une solution : http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx
Pourriez-vous me plus d'informations sur les collections? Merci. – Shuo
Merci, je pense que j'ai une solution ici: http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx – Shuo
J'ai utilisé celui-là aussi, mais il y a des cas où le code ne fonctionne pas (certains objets wpf n'héritent pas de DispatcherObject). – Femaref