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