Упрощенная архитектура моего приложения Silverlight:
- MainPage; DataContext установлен в MainViewModel
- MainPage имеет два элемента: UserControl и Rectangle
- в MainViewModel, у меня есть два свойства, UserControlVisible и RectVisible, оба типа Visibility, связанные со свойствами Visibility этих двух элементов в MainPage.XAML
- В MainViewModel реализовано INotifyPropertyChanged
Проблема в том, что когда я устанавливаю свойство RectVisible в MainViewModel в Visibility.Collapsed, Rectangle скрывается, что нормально, но когда я устанавливаю Visibility.Collapsed в UserControl (свойство UserControlVisible), оно никогда не скрывается!
Я не могу скрыть этот пользовательский элемент управления, и я должен сделать это через мой класс ViewModel. Почему он работает с элементом Rectangle, а не с UserControl? Когда я вручную устанавливаю видимость Collapsed в XAML, она скрывается, но я должен сделать это с помощью кода и объекта ViewModel.
(редактировать) Временное решение:
Я вручную подписался на событие PropertyChanged в 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;
}