2016-06-22 1 views
0

J'ai une page qui peut contenir 4 contrôles utilisateur différents, mais un seul d'entre eux doit être visible à la fois. Je voudrais faire quelque chose comme ceci:Visibilité sur UserControl non déclenchée

<regControls:MyUserControl1 Visibility="{Binding Ctrl1, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" /> 
    <regControls:MyUserControl2 Visibility="{Binding Ctrl2, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" /> 
    <regControls:MyUserControl3 Visibility="{Binding Ctrl3, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" /> 
    <regControls:MyUserControl4 Visibility="{Binding Ctrl4, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" /> 

Mais lorsque le composant est initialisé le convertisseur ne se déclenche pas du tout. Même si je lie la propriété et relance exécuter le changement.

Je préférerais ne pas initialiser les différents contrôles dans le code derrière. J'utilise WP8 Silverlight (PAS WP 8.1). Qu'est-ce que je rate?

EDIT:

Je commence à comprendre le problème. Mais je ne sais pas comment le résoudre. Nous utilisons donc GWT je reçois un appel de la couche GWT qui me dit ce qu'il faut montrer:

public void ShowMyUserControl1() 
{ 
    SimpleIoc.Default.Register<MyPageViewModel>(); 
    SimpleIoc.Default.Register<MyUserControl1ViewModel>(); 
    SimpleIoc.Default.Register<MyUserControl2ViewModel>();    
    SimpleIoc.Default.Register<MyUserControl3ViewModel>(); 
    SimpleIoc.Default.Register<MyUserControl4ViewModel>(); 

    navigationService.NavigateTo(typeof(MyPageViewModel).FullName); 

    var viewModel = SimpleIoc.Default.GetInstance<MyPageViewModel>(); 
    viewModel.DisplayMyUserControl1(); 
} 

public void ShowMyUserControl2() 
{ 
    .... 
} 

Le problème ici est que le modèle de vue est appelé et les propriétés déclenché avant que les composants sont initialisés. Le problème ici est aussi que je ne sais pas quelle méthode est appelée de GWT. Cela peut être ShowMyUserControl1 ou ShowMyUserControl2 (ou la méthode demandant le contrôle 3 ou 4.) Donc, d'une manière ou d'une autre, je dois le dire et en même temps passer des paramètres au bon modèle de vue avec des arguments venant de GWT. car le message est envoyé avant que tout contrôle ait été initialisé et enregistré pour écouter ces messages.L'utilisateur peut avoir quitté l'application et éteint le téléphone, puis revenir à nouveau, donc je dois m'attendre à ce que les modèles de vue ne « existe et doit être enregistré.

Répondre

0

est-DataContext (ViewModel) INotifyPropertyChange de soutien? Toute erreur de liaison dans la sortie de la console dans VS? Créer point d'arrêt sur la propriété. est-il allusion?

+0

Oui, j'ai pas d'autre problèmes avec Autres vues. Je ne sais pas comment tracer les erreurs de liaison pour Windows Phone 8.0. Oui, il casse sur la propriété, lors de la configuration. – peuhse

+0

Créez un nouveau convertisseur et remplacez-en un. Et créez un point d'arrêt. Vérifiez les paramètres d'entrée sur propertyChange. Et afficher le code ViewModel. – Arheus

+0

Voir ma question mise à jour. Le nouveau convertisseur ne change rien. En utilisant la modification de propriété mvvmlights, c'est-à-dire RaisePropertyChange (() => "PropertyName") – peuhse