Привязка данных к элементу управления - PullRequest
0 голосов
/ 03 ноября 2011

Я использую Silverlight с MVVM.

У меня есть простой LoginControl, связанный с LoginControlViewModel. LoginControl создан и добавлен в мой MasterPage.

Когда пользователь входит в мое приложение, нажав кнопку входа в систему на LoginControl, LoginControlViewModel отправляет событие обратно на MasterPageControlViewModel. На данный момент свойство MasterPageControlViewModel.LoginVisible установлено на False.

У меня проблема с XAML MasterPageView, так как я не знаю, как связать LoginControl со свойством MasterPageControlViewModel.LoginVisible. Ниже не работает.

<Controls:Login x:Name="LoginControl" Style="{StaticResource LoginControlStyle}"
    Visibility="{Binding LoginControlVisibility, Converter={StaticResource BoolConverter}}" />

В окне вывода указано следующее:

Ошибка System.Windows.Data: ошибка пути BindingExpression: свойство 'LoginControlVisibility' не найдено в 'Silverlight.Controls.LoginControlViewModel' 'Silverlight.Controls.LoginControlViewModel' (HashCode = 43749873). BindingExpression: Path = 'LoginControlVisibility' DataItem = 'Silverlight.Controls.LoginControlViewModel' (HashCode = 43749873); Целевым элементом является 'Controls.Login' (Name = 'LoginControl'); Целевым свойством является «Видимость» (тип «System.Windows.Visibility»)

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 03 ноября 2011

Ах, и я вижу, что ваше свойство находится в другой ViewModel, чем то, что имеет элемент управления для его DataContext.

То, что я делал в прошлом, это поместил LoginControl в другой контейнер (скажем, Border или StackPanel), и затем вы можете привязать Visibility этой панели к вашей собственности.Таким образом, DataContext LoginControl остается LoginControlViewModel, а привязка видимости проста.

Редактировать : Оказывается, что приведенный ниже метод не поддерживается в Silverlight.

Или у вас может быть сложная привязка к LoginControl, которая смотрит на его родителей DataContext:

Visibility="{Binding Path=DataContext.LoginVisible, 
         RelativeSource={RelativeSource FindAncestor, AncestorType=MasterPage},
         Converter={StaticResource BoolConverter}}"

Также ваша собственность называется LoginVisible не LoginControlVisibility, как у вас всвязывание?Или это просто опечатка в вопросе?

...