UserControl Видимость привязки через ViewModel - PullRequest
0 голосов
/ 29 августа 2009

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

Ответы [ 2 ]

1 голос
/ 14 октября 2009

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

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

VisibleProperty в этом случае должен принадлежать myusercontroldatacontext, а не к datacontext, где определен родительский xaml

0 голосов
/ 30 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...