architecture simplifiée de mon application Silverlight:UserControl Visibilité de liaison par ViewModel
- MainPage; DataContext ensemble à MainViewModel
- MainPage comporte deux éléments: UserControl et Rectangle
- dans MainViewModel, j'ai deux propriétés, UserControlVisible et RectVisible, les deux de type visibilité, binded aux propriétés de visibilité de ces deux éléments dans MainPage.xaml
- MainViewModel a mis en œuvre INotifyPropertyChanged
Le problème est, quand je mets la propriété RectVisible dans MainViewModel à Visibility.Collapsed, Rectangle cache, ce qui est bien, mais quand je mets Visibility.Collapsed à UserControl (propriété UserControlVisible), il ne se cache jamais!
Je ne peux pas cacher ce contrôle utilisateur, et je dois le faire à travers ma classe ViewModel. Pourquoi cela fonctionne avec l'élément Rectangle, mais pas avec UserControl? Lorsque je définis manuellement Visibilité à Réduire dans XAML, il est masqué, mais je dois le faire à travers le code et l'objet ViewModel.
(modifier) de sollution temporaire:
Je me suis abonné manuellement à l'événement PropertyChanged dans codebehind
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
viewmodel=new MainViewModel();
this.DataContext = viewmodel;
// fix for binding bug:
viewmodel.PropertyChanged += viewmodel_PropertyChanged;
}
void viewmodel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "LoginVisible")
loginWindowControl.Visibility = viewmodel.LoginVisible;
}
essayé, mais toujours la liaison ne fonctionne pas, il se cache uniquement lorsque je définis la propriété par codebehind –
soin de partager comment vous configurez la liaison (un sous-ensemble de votre XAML)? –