2010-09-10 12 views
0

J'ai un Shell avec 2 vues. Ils utilisent tous deux le même viewmodel, en fait le shell utilise le même viewmodel. J'ai 2 boutons dans le shell qui sont censés changer la visibilité des 2 vues. Il semble que même si la commande est en cours d'exécution, que la valeur est en cours de modification et que la propriété onpropertychanged est configurée correctement, la vue n'est pas actualisée. J'ai essayé de contrôler la visibilité depuis le shell parent et depuis la vue elle-même.La visibilité de la vue ne change pas

Ce sont mes commandes:

Public ReadOnly Property ShowMinimalistSearchResultsView As ICommand 
      Get 
       If _cmdShowMinimalistSearchResultsView Is Nothing Then 
        _cmdShowMinimalistSearchResultsView = New RelayCommand(AddressOf ShowMinimalistSearchResultsViewExecute) 

       End If 
       Return _cmdShowMinimalistSearchResultsView 

      End Get 
     End Property 

     Public ReadOnly Property ShowSearchResultsView As ICommand 
      Get 
       If _cmdShowSearchResultsView Is Nothing Then 
        _cmdShowSearchResultsView = New RelayCommand(AddressOf ShowSearchResultsViewExecute) 
       End If 
       Return _cmdShowSearchResultsView 

      End Get 
     End Property 

Ce sont les CommandExecutes:

Private Sub ShowMinimalistSearchResultsViewExecute() 
    Me.IsMinimalistSearchResultsViewVisible = True 
End Sub 

Private Sub ShowSearchResultsViewExecute() 
    Me.IsMinimalistSearchResultsViewVisible = False 

End Sub 

C'est la visiblité booléenne ....

Private _isminimalistsearchresultsviewvisible As Boolean 
Public Property IsMinimalistSearchResultsViewVisible As Boolean 
    Get 
     Return _isminimalistsearchresultsviewvisible 
    End Get 
    Set(ByVal value As Boolean) 
     _isminimalistsearchresultsviewvisible = value 
     OnPropertyChanged("IsMinimalistSearchResultsViewVisible") 
    End Set 
End Property 

Voici le XAML pour la vue ....

<local:MinimalistSearchResultsView Grid.Row="1" 
              Visibility="{Binding IsMinimalistSearchResultsViewVisible,Converter={StaticResource DebugConverter}}" /> 

Actuellement je suis en train de faire est d'obtenir ce une vue à afficher ou disparaissent lorsque vous exécutez les commandes. J'utilise le convertisseur de débogage pour vérifier si la visibilité essaie même de changer; ce qui n'est pas.

Pourquoi isnt ce travail?

+1

Que fait le DebugConverter? Vous savez que la visibilité est de type Visibilité et non booléenne. – Jehof

+1

La fenêtre "Sortie" de Visual Studio affiche-t-elle des erreurs de liaison? – Heinzi

+0

Heinzi, il ne montre aucune erreur de liaison pour ce que j'essaie ici. il y en a d'autres. mais ils étaient là avant que je commence ceci. – ecathell

Répondre

0

Scott kindof allait dans la bonne direction. C'était un problème d'instance de viewmodel. Même si les 3 utilisent le même viewmodel, j'ai les viewmodels déclarés à l'intérieur de chaque vue de base (pour faciliter la réutilisabilité) bien, dans ma coquille pour les vues que je ne suis pas déléguant l'datacontext de chaque point de vue des enfants aux coquilles viewmodel. Ainsi, chaque vue utilisait une instance différente de la même vue. C'est quelque chose que j'ai déjà fait, et j'espère que je m'en souviendrai dans le futur. :)

1

Sur la base de votre commentaire à Jehof ...

Quand vous dites «puis retourne » vous dites qu'il est de retour booléen, ou une visibilité. Si vous n'utilisez pas BooleanToVisibilityConverter, vous devez vous assurer que votre convertisseur effectue la logique de conversion d'un booléen en Visibilty.Visible ou Visibility.Hidden/Collapsed.

Si vous êtes tout simplement retourner le booléen qui vient dans votre convertisseur, alors je crois que ce sera un gros problème.

+0

je suis déjà allé de l'avant et configuré pour cela après avoir réfléchi à ce sujet aussi. Cependant, le convertisseur ne se déclenche qu'une seule fois au démarrage de l'application. Lorsque je clique sur le bouton qui modifie la valeur booléenne liée, le convertisseur n'est pas appelé. – ecathell

+0

Le DataContext de votre ne change pas ou n'est pas mis à jour après le chargement initial? Il semble que pour une raison ou pour une autre, votre liaison soit brisée ... pourriez-vous définir manuellement la propriété Visibility ailleurs, supprimant ainsi votre liaison et utilisant la valeur définie à la place? – Scott