Как настроить привязки к пользовательским элементам управления в отдельных каталогах - PullRequest
0 голосов
/ 04 июня 2010

на сегодняшний день я создал и настроил привязки и зависимости между элементами управления и другими объектами, когда они находятся в одном каталоге или в одном документе xaml.

Теперь я создал usercontrol, который находится в каталоге моего проекта под названием «Controls», затем этот элемент управления загружается в основной документ xaml с использованием тега

Мой вопрос: как мне настроить привязки между объектами в пользовательском элементе управления и объектами в основном документе xaml?

Примером этого может быть, если у меня есть текстовое поле в моем пользовательском элементе управления и на главной странице xaml у меня есть флажок. Когда флажок установлен, я хочу установить видимость текстового поля на Свернутый.

Как я уже сказал, я смог сделать это, когда оба объекта находятся в одном и том же документе. Но теперь, поскольку текстовое поле размещено внутри пользовательского элемента управления и внутри каталога, я не уверен, как на него ссылаться.

Спасибо

1 Ответ

0 голосов
/ 05 июня 2010

Добавьте DependencyProperty в свой UserControl. В XAML вашего основного окна свяжите с DependencyProperty. В XAML вашего UserControl свяжите с тем же DependencyProperty, используя RelativeSource FindAncestor.

Например, если ваш UserControl называется «MyUserControl» и имеет DependencyProperty «ShowDetails», привязка в основном XAML будет:

<Window ...>
  ...
  <local:MyUserControl ShowDetails="{Binding IsChecked,ElementName=checkBox}" />
  ...
  <CheckBox x:Name=checkBox Content="Show Details" />
  ...
</Window>

и в XAML UserControl это будет:

<UserControl ...>
  ...
  <Textbox ...
     Visibility="{Binding ShowDetails,
       RelativeSource={RelativeSource FindAncestor,local:MyUserControl,1},
       Converter={StaticResource BoolToVisibiltyConverter}" />
  ...
</UserControl>

Еще лучше, используйте шаблон MVVM. В этом случае вы должны поместить DependencyProperty в вашу ViewModel, которая будет доступна через DataContext как вашего главного окна, так и вашего UserControl. С MVVM нет необходимости использовать FindAncestor или ElementName, потому что и CheckBox, и TextBox привязываются непосредственно к свойству в ViewModel:

<Window ...>

  <local:MyUserControl />
  ...
  <CheckBox IsChecked="{Binding ShowDetails}" Content="Show Details" />

</Window>

с этим UserControl:

<UserControl>
  ...
  <TextBox ...
     Visibility="{Binding ShowDetails,
       Converter={StaticResource BoolToVisibiltyConverter}" />
  ...
</UserControl>
...