Я нахожу необходимость связываться с DataContext
в виде Page
, который устанавливается следующим образом:Привязать к Пейджу DataContext
<d:Page.DataContext>
<designTime:PayeesPageDesignViewModel />
</d:Page.DataContext>
Во время разработки. Тем не менее, мне нужно привязать к нему из дочернего элемента управления, который имеет другой контекст данных:
<GridView x:Name="PayeesGridView"
Margin="0,30,0,0"
IsItemClickEnabled="True"
ItemsSource="{Binding Payees}"
SelectionChanged="PayeesGridView_OnSelectionChanged">
Поскольку ItemsSource
устанавливается для GridView
, то DataContext
моего GridViewItems
устанавливается в отдельных Payee
объектов в Payees
коллекция. У моего ViewModel
есть свойство, которое мне нужно ссылаться от View
в конвертере, чтобы определить видимость элемента.
Я могу установить видимость, основанный на свойстве Payee
объекта, как это:
<Border Width="250"
Height="250"
Background="Gray"
Opacity="0.85"
Visibility="{Binding Path=IsOpen,
Converter={StaticResource AccountStatusToVisibilityConverter}}">
Но что мне действительно нужно, чтобы связать То- Settings.ShowInactive
свойство объекта Page
«s DataContext
. Есть ли способ захватить этот контекст из дочернего элемента управления? Я использую WinRT, поэтому у меня нет преимущества источника привязки FindAncestor
.
EDIT
Как было предложено в комментариях, я пытался изменить связывание выглядеть следующим образом:
Visibility="{Binding Path=DataContext.Settings.ShowInactivePayees, ElementName=PageName,
Converter={StaticResource AccountStatusToVisibilityConverter}}">
Но когда я поставил точку останова в AccountStatusToVisibilityConverter
, конвертер никогда не достигается ,
Дайте страницу 'x: Name' и используйте привязку' ElementName'? – Clemens
А, спасибо. Я знал, что есть способ сделать это, но я не мог понять это. Это то, что я получаю для программирования в середине ночи :) Я пытаюсь связать «ElementName =» PageName.DataContext »и« Path = »Settings.ShowInactivePayees« ', но переданное значение« null », хотя' DesignTimeViewModel' жестко запрограммирован как «false», и я пытаюсь во время выполнения с 'ShowInactivePayees' установить' true' или 'false'. –
'PageName.DataContext' не является именем элемента. Ваша привязка обязательно должна выглядеть так: {{Binding Path = DataContext.Settings.ShowInactive, ElementName = PageName} '. – Clemens