2009-08-29 2 views
0

Упрощенная архитектура моего 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; 
} 

ответ

0

Вы, вероятно, нужно найти способ, чтобы связать свойство Visibility в корень вашего контроля пользователя визуальные эффекты (сетка/панель).

+0

попробовал, но все еще привязка не работает, она скрывается только тогда, когда я устанавливаю свойство через codebehind –

+0

, чтобы поделиться тем, как вы настраиваете привязку (подмножество вашего XAML)? –

1

У меня была такая же проблема, и я исправил ее, и я не знаю, будет ли мое решение работать на вас. Datacontext для моего «MainPage» отличается от datacontext для моего UserControl. я установка DataContext для моего UserControl вручную через XAML я приведу пример:

<local:myusercontrol DataContext="myusercontroldatacontext" Visibiltiy="{Binding Path=VisibleProperty}"/> 

VisibleProperty этот случай должен принадлежать к myusercontroldatacontext, а не DataContext, где определяется родительским XAML

+0

пример был бы замечательным –

+0

жаль, что я не понял, что xml не будет отображаться без добавления кодовых комбинаций. Я снова добавил пример. –

Смежные вопросы