Je voulais tester quelque chose donc j'ai construit une petite vue & viewmodel avec un bouton et un ListBox. Lorsque je clique sur le bouton, j'exécute RunCommand comme dans le code ci-dessous. Je ne comprends pas pourquoi le Dispatcher ne déclenche pas l'action que je veux exécuter.Dispatcher pas envoi
Voici le code viewmodel:
public class ViewModel
{
private ObservableCollection<string> _items = new ObservableCollection<string>();
private ICommand _runCommand;
public ICommand RunCommand { get { return _runCommand ?? (_runCommand = new ActionCommand(RunCommandAction)); } }
private void RunCommandAction()
{
Task.Factory.StartNew(() =>
{
if (Thread.CurrentThread == EnvironmentData.UIThread)
_items.Add("Eldad");
else
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => _items.Add("Eldad")));
});
}
public IEnumerable<string> Items
{
get { return _items; }
}
public ViewModel()
{
_items.Add("Shahar");
}
}
Toutes les idées seront grandes
Merci
Que voulez-vous dire par ne déclenche pas l'action? RunCommandAction n'est pas appelé du tout? Ajoutez également le xaml où vous avez déclaré le bouton et utilisé la commande. –
Votre action est conçue pour tout faire dans le thread UI. Cela n'a aucun sens, OMI. – Dennis
Pourquoi pensez-vous que votre action ne se déclenche pas? Je soupçonne que votre action est déclenchée, mais vous la testez via une interface utilisateur liée à votre propriété 'Items'. Puisque vous n'implémentez pas 'INotifyPropertyChanged', et que votre propriété' Items' ne renvoie pas le type 'ObservableCollection', votre interface utilisateur ne va pas se mettre à jour. Essayez de changer votre propriété 'Items' pour taper' ObservableCollection' et tester à nouveau. –