2012-01-11 5 views
1

J'ai une classe qui est un viewmodel (en utilisant Prism). Il a une vue XAML associée. Quand je le faisChanger le curseur dans le code derrière

this.Cursor 

il n'y a pas de propriété Cursor disponible. Que dois-je faire pour accéder au curseur afin de pouvoir changer son icône?

+1

Quel est le type de 'this'? –

Répondre

4

Étant donné que le Cursor est une propriété liée à l'interface utilisateur, vous devez définir le curseur dans la vue, pas le ViewModel. this.Cursor devrait fonctionner correctement à partir du code-behind la vue

Si votre Cursor est basé sur quelque chose dans le ViewModel, comme si elle est le chargement de données, puis utilisez un DataTrigger dans votre XAML pour changer le curseur quand quelque chose comme une propriété IsLoading est la valeur true

<Style TargetType="{x:Type Window}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsLoading}" Value="True"> 
      <Setter Property="Cursor" Value="Wait" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

J'ai besoin du curseur pour changer pendant que le travail est fait dans une méthode particulière. Je n'ai pas de propriété comme IsLoading. Je veux placer le curseur au début de cette méthode et revenir à la fin. Y a-t-il un autre moyen? Aussi, à quel point cela fonctionne-t-il puisque tout est sur le fil principal? – 4thSpace

+0

@ 4thSpace Si votre méthode est dans 'ViewModel', il est préférable de créer une propriété' IsLoading' sur ViewModel et d'utiliser 'DataTrigger'. ViewModels ne devrait pas se soucier de l'interface utilisateur, et cela inclut les curseurs. – Rachel

+0

@ 4thSpace Et je ne suis pas sûr de savoir pourquoi vous êtes préoccupé par le filetage. Le seul moment où cela pourrait être un problème est si vous faites votre traitement sur un fil de fond. Ensuite, vous devez vous rappeler de faire des choses comme mettre à jour votre propriété 'IsLoading' sur le thread principal, soit avant de commencer le traitement ou en utilisant le' Dispatcher'. – Rachel